RabbitMQ消息队列使用注意事项

更新说明:

2002-08-11

添加消息队列批量删除脚本

添加消息队列初始化脚本

2020-08-08

添加消息队列使用注意事项

消息队列使用注意事项

消息队列中主要包含三个部分:

  • exchange

  • routing key

  • queue

img

代码编写的注意事项 :

项目中使用消息队列 QueueName 的查询标识和查询结果:

 [QueueConsumer(

 

img

根据下面的代码进行参数说明:

/// <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"
},

 

img

img

点击需要解除绑定的 Unbind

Queues 中解除错误绑定的方式

进入对应的QueueName,点击unbind

访问地址 : http://localhost:15672/#/queues

点击进入某个队列消息,点击unbind.

img

例如:

img

由于代码中定义 QueueName 为 EOrderActionHandler202008080210 和 EContractActionHandler202008080111,Routing Key 为 EOrderActionEvent 和 EContractActionEvent

并且 在RabbitMQ 服务器上,存在多个QueueName 对应 一个 Routing Key的现象,这样消息服务器无法处理 发送的消息来自哪个Routing key ,从而处理异常。

为了处理并解决这个问题,需要解除不需要的exchange 的绑定,之后再进行代码编译,发布和运行:

img

开发完毕之后,请保证QueueName 是不带任何用于测试的时间标志,或者特殊字符。保证与正式环境与UAT 一致。

生产和UAT 的注意事项:

代码发布之前,需要开发提供 [QueueConsumer( 的查询结果,如果QueueName 包含 用于测试的时间表示,或者特殊字符的,一律打回,修改没有问题之后,进行代码发布。

例如:下图中的 QueueName 要调整不能包含 任何用于测试的时间标志,或者特殊字符

img

代码发布之后,需要检查 环境 http://localhost:15672/#/exchanges/%2F/surging_demo 中的Routing Key 和QueueName 绑定是否唯一,即一个Routing Key 只能绑定一个QueueName ,如果出现多个,请开发人员调整代码。与此同时,维护人员解除ExChange中的所有绑定,等待重新发布之后,再次检查。

下图,仅仅保证 一个Routing Key 只能绑定一个QueueName,但是 QueueName 的格式不合格,打回代码。否则发布之后,消息队列存在使用错误。

img

消息清理脚本

# 批量删除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

 

posted @ 2020-08-12 16:33  Areas  阅读(78)  评论(0)    收藏  举报