RabbitMQ|异步

我们日常生活中肯定遇到“分身乏术”的情况,在出现这种情况时我们肯定只能按部就班一件一件事情来处理,这样就会浪费一些不必要的时间,如在书写作业的时候我们只有在写完一门课作业后才能去完成另外一门的作业。但在计算机中这个问题在一定程度上被很好的解决,这就是使用异步的思想,本文就来论述这个问题。

1 概念|异步

提到异步很自然就会想到同步。

1.1 同步与异步

二者都是一种通讯方式,关注的是消息通信机制 (synchronous communication/ asynchronous communication)。

(1)同步

使用某个东西时,调用方得等待这个调用返回结果才能继续执行。

(2)异步

调用方不会处于等待状态去等待结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。

1.2 比喻

  • 同步:咱们线下去商城买东西,看上一个东西,店家就去拿货,而在拿货这段时间(不长的时间)咱们只能在店里等着,不能离开。
  • 异步:咱们线上买东西,手机app下单后就可以做其他的事情(学习、游戏),等货到了咱们去签收就好了。

上面的过程,我们可以将买东西 看出是咱们的次业务,而其他事情是我们的主业务, 那么我们要提高效率肯定需要将将次业务从主业务分离(计算机中为解耦 )出来,这样就引出了生产者消费者设计模式

2 生产者消费者设计模式

寻找中间人(broker)搭桥,保证两个业务没有直接关联。这种解耦方式为:生产者消费者设计模式。如下图:



即:生产者生成消息,缓存到消息队列中,消费者读取消息队列中的消息并执行。这其中消息队列是关键。

咱们可以把消息队列看作是消息在传输的过程中保存消息的容器

3 RabbitMQ介绍

现在主流消息队列有:RabbitMQ、ActiveMQ、Kafka等等。

3.1 主流消息队列比较:

(1)RabbitMQ和ActiveMQ比较

  • 系统吞吐量:RabbitMQ好于ActiveMQ
  • 持久化消息:RabbitMQ和ActiveMQ都支持
  • 高并发和可靠性:RabbitMQ好于ActiveMQ

(2)RabbitMQ和Kafka:

  • 系统吞吐量:RabbitMQ弱于Kafka
  • 可靠性和稳定性:RabbitMQ好于Kafka比较
  • 设计初衷:Kafka是处理日志的,是日志系统,所以并没有具备一个成熟MQ应该具备的特性。

3.2 RabbitMQ安装(mac电脑下)

本次安装笔者走了很多弯路,回过头来集中的问题出在用终端命令始终无法从github上下载RabbitMQ的环境压缩包,且网上教程也多是使用终端来下载,为此耽误了很长的时间,下面介绍下我的方法。

(1)rabbitmq-server-generic-unix-3.8.3.tar.xz下载

网址:https://www.rabbitmq.com/install-generic-unix.html#downloads

选择下图的位置进行下载:

(2)移动手动下载好的文件到文件目录

  • 复制下载好的文件
  • 访达-前往-前往文件夹:输入~/Library/Caches/Homebrew进入这个目录
  • 打开后将看到“downloads”目录,里面就是安装依赖时下载的缓存文件,downloads文件夹同层级外面是downloads里面的文件替身
  • 此时将之前下载好的文件粘贴到dowanloads目录下。

  • 会发现一个文件后缀为:.incomplete,这是因为之前没有下完整所以显示临时文件后缀,复制这个文件夹的名称,然后选择刚粘贴过来的文件,重命名并粘贴,同时去掉后缀.incomplete。
  • 当你找不到.incomplete文件时,是因brew还没开始生成下载的临时文件,那你就再次运行一下就可以了。

(3)终端输入brew install rabbitmq即可

3.3 RabbitMQ的配置远程访问(mac电脑下)

进入/usr/local/etc/rabbitmq

找到文件rabbitmq-env.conf,并打开进行如下图修改,将原有的127.0.0.1删除:

3.4 brew管理RabbitMQ(mac系统下)

笔者使用brew进行管理,所以需要您先对homebrew进行安装,brew管理具体如下:

# 启动
$ brew services start rabbitmq # 重启
$ brew services restart rabbitmq # 停止
$ brew services stop rabbitmq

RabbitMQ|异步的更多相关文章

  1. 消息中间件系列五:RabbitMQ的使用场景(异步处理、应用解耦)

    一.异步处理 场景: 用户注册,写入数据库成功以后,发送邮件和短信. 准备工作: 1)安装RabbitMQ,参考前面的文章 2)新建一个名为RabbitMQAsyncProc的maven web工程, ...

  2. 抽一根烟的时间学会.NET Core 操作RabbitMQ

    什么是RabbitMQ? RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件.可实现队列,订阅/ ...

  3. 基于消息队列(RabbitMQ)实现延迟任务

    一.序言 延迟任务应用广泛,延迟任务典型应用场景有订单超时自动取消:支付回调重试.其中订单超时取消具有幂等性属性,无需考虑重复消费问题:支付回调重试需要考虑重复消费问题. 延迟任务具有如下特点:在未来 ...

  4. Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是“Java秒杀系统实战系列文章”的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即“商品秒杀”功能模块的代码实战. 内容: “商品秒杀”功能模块是建立在“商品详情”功 ...

  5. 新版本SpringCloud sleuth整合zipkin

    SpringCloud Sleuth 简介 Spring Cloud Sleuth为Spring Cloud实现了分布式跟踪解决方案. Spring Cloud Sleuth借鉴了Dapper的术语. ...

  6. SpringCloud之Turbine

    [前面的话]书接上文,本文的某些知识依赖我的上一篇SpringCLoud的文章:SpringCloud之Feign,如果没有看过可以先移步去看一下.前文提到了hystrix的应用,以及hystrix的 ...

  7. 一个轻量级的.Net Core微服务快速开发的轮子

    前言     Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...

  8. software engineer's resume(帮助你写程序员简历)

    关键词 参考 简历模板 参考 下面开始是正文(关键词原文) 介绍 本项目由海外兔 (https://osjobs.net) 维护,海外兔团队由一线互联网面试官组成,提供海内外公司一对一入职套餐以及算法 ...

  9. 《基于.NET Core构建微服务》系列文章(更新至第6篇,最新第7篇,已发布主页候选区)

    原文:Building Microservices On .NET Core – Part 1 The Plan 时间:2019年1月14日 作者:Wojciech Suwała, Head Arch ...

  10. 「Java分享客栈」随时用随时翻:微服务链路追踪之zipkin搭建

    前言 微服务治理方案中,链路追踪是必修课,SpringCloud的组件其实使用很简单,生产环境中真正令人头疼的往往是软件维护,接口在微服务间的调用究竟哪个环节出现了问题,哪个环节耗时较长,这都是项目上 ...

随机推荐

  1. [Abp vNext 入坑分享] - 1.创建初始的项目

    一.简要说明 本篇文章主要是跟着官方的文档把项目安装好先,同时了解一下大概的项目结构. 二.具体步骤 2.1全局安装ABP CLI,直接在cmd中安装即可.如果你之前安装过,这里可以略过: dotne ...

  2. 下载mp4文件

    实现mp4文件的下载,而不是在线播放 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  3. Say goodbye

    Since September 28th 2015 Scriptogram officially closed. We considered every option before making th ...

  4. VSCode六大通用插件真香合集

    目录 一.background:设置心水背景图 安利理由: 安装及设置步骤: 设置过程中使用的代码: 成果展示: 注意: 二.Material Theme(VSCode主题)+Material Ico ...

  5. Python之numpy,pandas实践

    Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应用程序,便 ...

  6. Zabbix数据库表分区

    zabbix的监控主机数量将近300,且运行了一年时间了,最近zabbix server服务监控历史数据等服务不断自身告警.查询性能也变得很低 关于历史数据的两个参数,在zabbix server的配 ...

  7. mysql-管理命令【创建用户、授权、修改密码、删除用户和授权、忘记root密码】

    一.创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 关键参数说明: username - 创建登录用户名, host ...

  8. Struts2漏洞利用

    Struts漏洞合集 Struts-S2-013漏洞利用 受影响版本 Struts 2.0.0 - Struts 2.3.14.1 漏洞利用 任意命令执行POC: ${(#_memberAccess[ ...

  9. python操作ftp文件

    from ftplib import FTP ftp = FTP('ftp.abc.com') ftp.login(user='username', passwd='********') ftp.cw ...

  10. redis- info调优入门-《每日五分钟搞定大数据》

    本文根据redis的info命令查看redis的内存使用情况以及state状态,来观察redis的运行情况以及需要作出的相应优化. info 1.memory used_memory:13409011 ...