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