常常在開發中會遇到一些不須要同步執行的業務,那咱們就須要用到消息隊列來進行異步執行,可是對於某些業務就還須要用到延時的功能,好比訂單支付超時關閉,那麼這個時候咱們就須要開啓消息隊列的延時功能,固然也有朋友說有其餘的解決辦法,例如:數據庫輪訓以及線程休眠,可是這些相對於延時消息隊列來講,都顯得比較遜色。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