Docker开启RabbitMQ延时消息队列

8,094次阅读
12条评论

前言

经常在开发中会遇到一些不需要同步执行的业务,那我们就需要用到消息队列来进行异步执行,但是对于某些业务就还需要用到延时的功能,比如订单支付超时关闭,那么这个时候我们就需要开启消息队列的延时功能,当然也有朋友说有其他的解决办法,例如:数据库轮训以及线程休眠,但是这些相对于延时消息队列来说,都显得比较逊色。
Docker

正文

安装 Docker

docker 的安装就不用多说了,在 Centos 下就一行命令搞定(其他的系统版本请自行查阅):

yum update -y && yum install -y docker && service docker start

拉取 RabbitMQ 镜像并启动

docker pull rabbitmq:management

docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
上述命令中的 RABBITMQ_DEFAULT_USER 为默认用户,RABBITMQ_DEFAULT_PASS为默认密码,请自行修改即可

安装延时插件

首先先到 rabbitmq 官网 下载自己 rabbitmq 对应版本的延时插件 rabbitmq_delayed_message_exchange 到服务端,我的是 3.7.x,所以执行:

wget https://dl.bintray.com/rabbitmq/community-plugins/3.7.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171201-3.7.x.zip

下载完成之后我们将 zip 文件进行解压,然后我们执行 docker ps 查看自己的 rabbitmq 的容器 ID:

[root@121 download]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                         NAMES
c5e3d04e3141        rabbitmq:management   "docker-entrypoint……"   7 days ago          Up 7 days           4369/tcp, 0.0.0.0:1883->1883/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp, 0.0.0.0:25672->25672/tcp, 0.0.0.0:61613->61613/tcp, 15671/tcp   rabbit

接着我们将插件拷贝到容器的插件目录下:

docker cp rabbitmq_delayed_message_exchange-20171201-3.7.x.ez c5e3d04e3141:/plugins
# c5e3d04e3141 是自己的容器 ID

然后我们进入到容器的 bash 中:

sudo docker exec -it c5e3d04e3141 /bin/bash

进入到 plugins 目录查看是否有 rabbitmq_delayed_message_exchange-20171201-3.7.x.ez 文件,有的话就说明成功拷贝到 rabbitmq 的插件目录了,接着我们就执行最后一步,开启插件:

root@my-rabbit:/plugins# rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Enabling plugins on node rabbit@my-rabbit:
rabbitmq_delayed_message_exchange
The following plugins have been configured:
  rabbitmq_delayed_message_exchange
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@my-rabbit……
The following plugins have been enabled:
  rabbitmq_delayed_message_exchange

started 1 plugins.

执行 rabbitmq-plugins enable rabbitmq_delayed_message_exchange 在 log 最后出现 started 1 plugins.,就说明开启成功,退出 rabbitmq 的 bash 之后执行docker restart rabbit 重启 rabbitmq 就可以使用延时消息队列来处理业务了。

后记

在以前的业务中我都是用的文章开头说的稍显逊色的做法来处理这种业务,但是这种方法显然是不可靠的,当然以前我不用消息队列的原因就是听着这个名字就觉得很难,后来真正用上了之后发现很好上手的,所以不能再事情未开始之前就给自己下了死刑,加油!Docker

4
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 2019-08-07发表,共计2148字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(12条评论)
验证码
载入中...
9999 评论达人 LV.1
2019-09-15 12:32:22 回复

很优秀啊,能增加网址就完美了

WindowsWindowsChromeChrome55.0.2883.87
搬瓦工 评论达人 LV.1
2019-09-08 09:32:46 回复

交换链接吗

WindowsWindowsChromeChrome63.0.3239.132
cjd 评论达人 LV.1
2019-08-29 09:19:51 回复

电商专用快递网站www.dh5u.com单号无忧

WindowsWindowsChromeChrome63.0.3239.132
头条 评论达人 LV.1
2019-08-13 23:56:56 回复

文章不错非常喜欢

WindowsWindowsChromeChrome63.0.3239.132
repostone 评论达人 LV.1
2019-08-12 17:14:37 回复

非技术的路过。

WindowsWindowsChromeChrome63.0.3239.132