当前位置: 首页 > 知识库问答 >
问题:

如何使用rabbitmq路由功能知道消息是否已发布到队列

金成济
2023-03-14

它像发布/订阅一样工作。因此,可以将队列绑定或取消绑定到不同的事件,以便消费者/订阅者只接收他们感兴趣的消息。

当然,生产者/发布者现在使用绑定键(事件名)作为routing_key将其传递给pika实现。但是,当它为不存在的绑定发布某些内容时,消息就会丢失,也就是说,当没有人为事件foo绑定队列时,但是一些发布服务器调用pika.basic_publish(...,routing_key='foo')

所以我的问题是:

>

  • 检查pika.basic_publish的返回值。它总是返回none

    检查当我们试图发布一个不存在的绑定时是否有异常。一个都没有。

    有一个额外的队列来进行频带控制(因为所有订阅服务器都由相同的进程运行)。这种方法在我看来并不理想。

    rabbitmq版本为2.8

    多谢

  • 共有1个答案

    岳锦
    2023-03-14

    我相信您的问题的答案是RabbitMQ中的强制标志:

    此标志告诉服务器,如果消息无法路由到队列,该如何响应。具体地说,如果设置了强制,并且在运行绑定之后,消息被放置在零队列中,那么消息将返回给发件人(带有一个basic.return)。如果在相同的情况下没有设置强制,服务器将静默地删除消息。

    这基本上意味着,对一条消息进行排队,如果它不能被路由,那么将它返回给我。查看规范中的basic_publish以打开它。

     类似资料:
    • 我的发布服务器代码如下所示: 如有任何帮助或指导,不胜感激,谢谢。

    • 本文向大家介绍Python如何将消息发布到RabbitMQ,包括了Python如何将消息发布到RabbitMQ的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 接下来,我们需要打开与RabbitMQ服务器的连接。 之后,我们需要建立一个频道。每个连接可以有多个通道,通常在执行多线程任务时,建议(但不是必需)每个线程一个。 建立频道后,我们就可以开始准备信息了。 现在,我们可以通过简单

    • 在队列选项卡的rabbitMQ web界面上,我看到了“概述”面板,我在其中找到了以下内容: 排队消息: 准备好了 未确认 总数 我猜“总数”是多少。但什么是“准备就绪”和“未确认”?“准备好了”——传递给消费者的信息?“未确认”-? 消息费率: 发表 交付 重新交付 承认 这些信息是什么?尤其是“重新交付”和“确认”?这是什么意思?

    • 主要内容:一、前情回顾,二、业务场景介绍,三、初步落地一、前情回顾 之前给大家聊了一下,面试时如果遇到消息中间件这个话题,面试官上来可能问的两个问题: 你们的系统架构中为什么要引入消息中间件? 系统架构中引入消息中间件有什么缺点? 关于这两个问题的回答,可以参见之前的两篇文章: 《 为什么要使用MQ消息中间件?这几个问题必须拿下!》 《 用了MQ消息中间件后,我开始后悔了...》 在问完这两个问题之后,不同风格的面试官可能会展开不同的发问。 针对那种

    • 一种方法是声明队列并将消息发布到该队列,并让所有使用者从该队列中消费。这将在不同的消费者之间分发消息。 我不清楚,如果上面的操作是正确的,或者最佳实践是将消息传递到Exchange而不是直接发布到队列。使用Exchange时,我必须确保在生产者创建Exchange之后声明队列,然后才开始发布消息。否则,没有队列接收到消息,并且消息将丢失。

    • 问题内容: 即使文件在远程http服务器上不存在,它也会以静默方式返回,它只是将html页面保存到命名文件中。例如: 即使abc.jpg在google.com服务器上不存在,它只是默默返回,生成的不是有效的jpg文件,它实际上是html页面。我猜返回的标头(一个httplib.HTTPMessage实例)可以用来实际上告诉检索是否成功,但是我找不到的任何文档。 有人可以提供有关此问题的一些信息吗?