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