Rabbitmq 是否可以在amqp中获取未路由的消息?

Rabbitmq 是否可以在amqp中获取未路由的消息?,rabbitmq,amqp,node-amqp,php-amqp,Rabbitmq,Amqp,Node Amqp,Php Amqp,使用RabbitMQ web UI,当我发布到没有当前队列绑定的主题交换时,RabbitMQ表示消息已发布但未路由 使用amqp.node,当我将队列绑定到exchange并开始使用“#”(all)消费时,我没有得到任何东西 我希望收到以前发布但未路由的消息。这可能吗 我希望收到以前发布但未路由的消息。这可能吗 这是不可能的 如果消息没有路由到任何地方,它将消失在空白中。如果需要保留它,则必须将其路由到队列。无法获取以前没有发送到任何地方的消息,并重新路由它 您的解决方案选择非常有限。您必须始终

使用RabbitMQ web UI,当我发布到没有当前队列绑定的主题交换时,RabbitMQ表示消息已发布但未路由

使用amqp.node,当我将队列绑定到exchange并开始使用“#”(all)消费时,我没有得到任何东西

我希望收到以前发布但未路由的消息。这可能吗

我希望收到以前发布但未路由的消息。这可能吗

这是不可能的

如果消息没有路由到任何地方,它将消失在空白中。如果需要保留它,则必须将其路由到队列。无法获取以前没有发送到任何地方的消息,并重新路由它

您的解决方案选择非常有限。您必须始终确保消息路由到队列

如果您使用备用exchange()通过另一个exchange路由无处可去的邮件,则可以实现这一点

当消息在第一次交换中没有到达任何地方时,它将通过备用交换。此时,您必须确保消息进入队列


稍后,当您需要处理通过备用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显示消息的方式:

消息已发布,但未路由。

选中此项:

您正在查找此项:


如果邮件未被路由,请指定另一种交换方式。

这是一个有趣的想法!在这种情况下,消息将被传递回生产者,您可以稍后处理存储和重新发布,对吗?可以对未送达的邮件进行批处理,并使用某种计时器重新尝试发布这些邮件。我必须记住这一点是的,您将收回您的邮件,您可以决定稍后重新发布、存储等。