Rabbitmq 是否可以在amqp中获取未路由的消息?
使用RabbitMQ web UI,当我发布到没有当前队列绑定的主题交换时,RabbitMQ表示消息已发布但未路由 使用amqp.node,当我将队列绑定到exchange并开始使用“#”(all)消费时,我没有得到任何东西 我希望收到以前发布但未路由的消息。这可能吗 我希望收到以前发布但未路由的消息。这可能吗 这是不可能的 如果消息没有路由到任何地方,它将消失在空白中。如果需要保留它,则必须将其路由到队列。无法获取以前没有发送到任何地方的消息,并重新路由它 您的解决方案选择非常有限。您必须始终确保消息路由到队列 如果您使用备用exchange()通过另一个exchange路由无处可去的邮件,则可以实现这一点 当消息在第一次交换中没有到达任何地方时,它将通过备用交换。此时,您必须确保消息进入队列Rabbitmq 是否可以在amqp中获取未路由的消息?,rabbitmq,amqp,node-amqp,php-amqp,Rabbitmq,Amqp,Node Amqp,Php Amqp,使用RabbitMQ web UI,当我发布到没有当前队列绑定的主题交换时,RabbitMQ表示消息已发布但未路由 使用amqp.node,当我将队列绑定到exchange并开始使用“#”(all)消费时,我没有得到任何东西 我希望收到以前发布但未路由的消息。这可能吗 我希望收到以前发布但未路由的消息。这可能吗 这是不可能的 如果消息没有路由到任何地方,它将消失在空白中。如果需要保留它,则必须将其路由到队列。无法获取以前没有发送到任何地方的消息,并重新路由它 您的解决方案选择非常有限。您必须始终
稍后,当您需要处理通过备用exchange传递的消息时,您必须从该消息当前所在的队列中读取该消息,并通过正确的exchange重新发布该消息 处理未路由的消息可以使用
强制
标志,并通过以下方式添加ReturnListener
:
final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.addReturnListener(new ReturnListener() {
public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("unrouted messages here!!!");
}
});
bool isMandatory = true;
channel.basicPublish("my_exchange","not_routed",isMandatory,null,"not_routed_message".getBytes());
我不知道php
库是否支持这个监听器,但是标准客户端可以做到这一点
这就是UI显示消息的方式:
消息已发布,但未路由。
选中此项:您正在查找此项:
如果邮件未被路由,请指定另一种交换方式。这是一个有趣的想法!在这种情况下,消息将被传递回生产者,您可以稍后处理存储和重新发布,对吗?可以对未送达的邮件进行批处理,并使用某种计时器重新尝试发布这些邮件。我必须记住这一点是的,您将收回您的邮件,您可以决定稍后重新发布、存储等。