RabbitMQ消息队列使用注意事项
2002-08-11
添加消息队列批量删除脚本
添加消息队列初始化脚本
2020-08-08
添加消息队列使用注意事项
消息队列使用注意事项
消息队列中主要包含三个部分:
-
exchange
-
routing key
-
queue

代码编写的注意事项 :
项目中使用消息队列 QueueName 的查询标识和查询结果:
[QueueConsumer(

根据下面的代码进行参数说明:
/// <summary>
/// 订单与非订单电子合同用
/// </summary>
[QueueConsumer("EOrderActionHandler", QueueConsumerMode.Normal, QueueConsumerMode.Fail)] public class EOrderActionHandler : BaseIntegrationEventHandler<EOrderActionEvent>
EOrderActionHandler:消费者名称,即消息队列消费者名称
定义来源:Surging.Core.EventBusRabbitMQ.Attributes.QueueConsumerAttribute
QueueName: 队列名称格式:大写字母开头,以业务描述 + ActionHandler 结尾;
注意:QueueName 的名称会影响消息队列中消息发送的路径。
如果修改了QueueName ,那么在本地进行测试的时候,请务必清空 ExChange的错误绑定,否则造成消息无法正常发送。
EOrderActionEvent:消息路由Key,即消息队列中的Routing Key
ExChange 绑定的解绑方式:
进入对应的访问地址,点击unbind
访问地址:http://localhost:15672/#/exchanges
访问地址: http://localhost:15672/#/exchanges/%2F/surging_demo
由于我们的项目中 surgingSettings.json 配置文件配置消息的ExChange 名称为surging_demo,所以消息都在surging_demo 中进行通信。
此处还需要注意:MessageTTL ,不同环境中的人rabbitmq 的创建是不一致的。可以需要根据实际进行调整。否则会报错。例如UAT 环境MessageTTL 为8000
"EventBus": {
"EventBusConnection": "${EventBusConnection}|localhost",
"EventBusUserName": "${EventBusUserName}|admin",
"EventBusPassword": "${EventBusPassword}|admin",
"VirtualHost": "${VirtualHost}|/",
"MessageTTL": "${MessageTTL}|30000",
"RetryCount": "${RetryCount}|1",
"FailCount": "${FailCount}|3",
"prefetchCount": "${PrefetchCount}|1",
"BrokerName": "${BrokerName}|surging_demo",
"Port": "${EventBusPort}|5672"
},


点击需要解除绑定的 Unbind
Queues 中解除错误绑定的方式:
进入对应的QueueName,点击unbind
访问地址 : http://localhost:15672/#/queues
点击进入某个队列消息,点击unbind.

例如:

由于代码中定义 QueueName 为 EOrderActionHandler202008080210 和 EContractActionHandler202008080111,Routing Key 为 EOrderActionEvent 和 EContractActionEvent
并且 在RabbitMQ 服务器上,存在多个QueueName 对应 一个 Routing Key的现象,这样消息服务器无法处理 发送的消息来自哪个Routing key ,从而处理异常。
为了处理并解决这个问题,需要解除不需要的exchange 的绑定,之后再进行代码编译,发布和运行:

开发完毕之后,请保证QueueName 是不带任何用于测试的时间标志,或者特殊字符。保证与正式环境与UAT 一致。
生产和UAT 的注意事项:
代码发布之前,需要开发提供 [QueueConsumer( 的查询结果,如果QueueName 包含 用于测试的时间表示,或者特殊字符的,一律打回,修改没有问题之后,进行代码发布。
例如:下图中的 QueueName 要调整不能包含 任何用于测试的时间标志,或者特殊字符

代码发布之后,需要检查 环境 http://localhost:15672/#/exchanges/%2F/surging_demo 中的Routing Key 和QueueName 绑定是否唯一,即一个Routing Key 只能绑定一个QueueName ,如果出现多个,请开发人员调整代码。与此同时,维护人员解除ExChange中的所有绑定,等待重新发布之后,再次检查。
下图,仅仅保证 一个Routing Key 只能绑定一个QueueName,但是 QueueName 的格式不合格,打回代码。否则发布之后,消息队列存在使用错误。

消息清理脚本
# 批量删除Queues 的脚本。删除所有目前 / 下的所有消息队列
cd "C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.2\sbin\"
del list_queues.txt
rabbitmqctl list_queues name -p / > list_queues.txt
for /f "skip=3 delims=*" %i in (list_queues.txt) do rabbitmqctl delete_queue %i
del list_queues.txt
消息队列重新初始化脚本
cd "C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.2\sbin\"
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin .* .* .*
pause
浙公网安备 33010602011771号