常常在开发中会遇到一些不须要同步执行的业务,那咱们就须要用到消息队列来进行异步执行,可是对于某些业务就还须要用到延时的功能,好比订单支付超时关闭,那么这个时候咱们就须要开启消息队列的延时功能,固然也有朋友说有其余的解决办法,例如:数据库轮训以及线程休眠,可是这些相对于延时消息队列来讲,都显得比较逊色。php
docker的安装就不用多说了,在Centos下就一行命令搞定(其余的系统版本请自行查阅):html
yum update -y && yum install -y docker && service docker start复制代码
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,因此执行:node
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:web
[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
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的插件目录了,接着咱们就执行最后一步,开启插件:bash
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就可使用延时消息队列来处理业务了。异步
在之前的业务中我都是用的文章开头说的稍显逊色的作法来处理这种业务,可是这种方法显然是不可靠的,固然之前我不用消息队列的缘由就是听着这个名字就以为很难,后来真正用上了以后发现很好上手的,因此不能再事情未开始以前就给本身下了死刑,加油! tcp
原文连接:www.licoy.cn/3361.htmlui