社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker开启RabbitMQ延时消息队列

憧憬Licoy • 5 年前 • 321 次点击  
阅读 12

Docker开启RabbitMQ延时消息队列

前言

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




正文

安装Docker

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

yum update -y && yum install -y docker && service docker start复制代码

拉取RabbitMQ镜像并启动

docker pull rabbitmq:managementdocker 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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc5e3d04e3141 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_exchangeEnabling plugins on node rabbit@my-rabbit:rabbitmq_delayed_message_exchangeThe following plugins have been configured:rabbitmq_delayed_message_exchangerabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatchApplying plugin configuration to rabbit@my-rabbit...The following plugins have been enabled:rabbitmq_delayed_message_exchangestarted 1 plugins.复制代码

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

后记

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


原文链接:www.licoy.cn/3361.html


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37738
 
321 次点击