本地测试时使用docker安装mq非常方便
本地Docker安裝rabbitMq 参考链接:https://www.jianshu.com/p/ebdc106cfd00
docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management
docker run -d -p 15672:15672 -p 5672:5672 --hostname my-rabbit --name test-rabbit rabbitmq:3
停止 RabbitMQ 容器
docker stop rabbitmq
启动 RabbitMQ 容器
docker start rabbitmq
重启 RabbitMQ 容器
docker restart rabbitmq
查看 RabbitMQ 容器进程信息
docker top rabbitmq
控制台信息
启动容器后,可以浏览器中访问http://localhost:15672来查看控制台信息。
RabbitMQ默认的用户名:guest,密码:guest
composer install
thinkphp 创建消费者
\console\command\OrderCreateConsumer 为生成路径,win下用 \ linux 用 / , 我是win环境
php think make:command app\console\command\OrderCreateConsumer OrderCreateConsumer
php think make:command app\console\command\OrderPayConsumer OrderPayConsumer
Mq消费者消息体参考
{
"body": "消息内容",
"body_size": 78,
"is_truncated": false,
"content_encoding": null,
"delivery_info": {
"channel": {
"callbacks": {
"amq.ctag-D9g9MZBdAQqnFXbY3jVHbg": {}
}
},
"delivery_tag": 1,
"redelivered": true,
"exchange": "test_exchange",
"routing_key": "test_key",
"consumer_tag": "amq.ctag-D9g9MZBdAQqnFXbY3jVHbg"
}
}
注意事项
1、redis 超时时间需要设置为0,否则Mq消费者运行时会经常超时退出
安装拓展
在RabbitMQ中,我们可以通过消息的过期时间TTL和死信队列DLX来实现延迟队列,虽说这种实现的方式可以用,但是并不推荐,因为比较复杂,还有许多问题。
RabbitMQ官方提供了延迟队列插件rabbitmq-delayed-message-exchange,使我们的使用延迟队列更加简单
官网社区中提供了很多的插件 https://www.rabbitmq.com/community-plugins.html
我们只需要安装 延迟队列插件rabbitmq-delayed-message-exchange 即可
延迟队列插件 rabbitmq-delayed-message-exchange 安装过程
插件github链接 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange
1、下载拓展文件rabbitmq_delayed_message_exchange-3.10.0.ez
比如我下载后的文件名为 rabbitmq_delayed_message_exchange-3.10.0.ez 将文件放到桌面后的路径为 C:\Users\Administrator\Desktop\rabbitmq_delayed_message_exchange-3.10.0.ez
2、将插件上传到docker容器内部
找到运行中的RabbitMQ容器。我的ID是 341e226e2750
docker ps
上传到docker容器内部
docker cp C:\Users\Administrator\Desktop\rabbitmq_delayed_message_exchange-3.10.0.ez 341e226e2750:/plugins
3、进入容器,启动插件 参考文章
docker exec -it 341e226e2750 /bin/sh
同样是在容器内下,执行rabbitmq-plugins enable rabbitmq_delayed_message_exchange,启用插件
# 修改一下权限
cd /plugins
chown -R rabbitmq:rabbitmq rabbitmq_delayed_message_exchange-3.10.0.ez
# 启动各种服务,不需要的可以不启动
su root
cd /opt/rabbitmq/sbin
./rabbitmq-plugins enable rabbitmq_delayed_message_exchange
./rabbitmq-plugins enable rabbitmq_management
./rabbitmq-plugins enable rabbitmq_federation_management
./rabbitmq-plugins enable rabbitmq_mqtt
./rabbitmq-plugins enable rabbitmq_stomp
启用插件可能出现的问题:Plugin configuration unchanged.
插件可能已经启动,不需要重复启动。这个错误不用管
打开控制台
打开浏览器访问 http://localhost:15672/ 就可以看到管理界面
使用rabbitmq 默认的账号密码 guest
登录即可
控制面板可能出现的问题2: Stats in management UI are disabled on this node
cd /etc/rabbitmq/conf.d/
#修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf