RabbitMQ:延迟交换未传递到队列
我在RabbitMQ中启用了消息延迟插件(插件在中可用)。延迟消息交换(名为“延迟交换”)是在交换菜单中创建的。当我试图通过一段代码向“延迟交换”发送消息时:RabbitMQ:延迟交换未传递到队列,rabbitmq,Rabbitmq,我在RabbitMQ中启用了消息延迟插件(插件在中可用)。延迟消息交换(名为“延迟交换”)是在交换菜单中创建的。当我试图通过一段代码向“延迟交换”发送消息时: rabbitTemplate.convertAndSend("delayed-exchange", queueName, Utils.toJson(obj), message -> { message.getMessageProperties().setPriority(priorityCode);
rabbitTemplate.convertAndSend("delayed-exchange", queueName, Utils.toJson(obj),
message -> {
message.getMessageProperties().setPriority(priorityCode);
message.getMessageProperties().setDelay(delay);
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
return message;
});
我可以在管理控制台的“消息速率”图表中看到消息:
但没有消息传递到队列:
有什么想法吗?您没有说它是什么库,所以我无法检查,但我敢打赌您误解了
convertAndSend
函数的参数:
rabbitTemplate.convertAndSend("delayed-exchange", queueName, ...
在发布到exchange时,您可以指定“路由密钥”,如何解释该密钥取决于exchange。除了名称为空字符串的特殊“默认交换”之外,这不是队列名称
路由键的工作方式取决于交换类型,在设置交换时使用延迟交换
插件的情况下:
- 如果是“扇出”交换,则忽略路由密钥,并将消息发布到所有绑定队列
- 如果是“直接”交换,则路由密钥直接与绑定密钥匹配
- 如果是“主题”交换,则可以根据路由密钥的模式匹配路由密钥
- 其他类型的交换可用于执行更奇特的路由