如何查找rabbitmq是否向消费者发送了特定消息

时间:2015-01-14 22:59:16

标签: rabbitmq

我已经完成了RabbitMQ队列ccing,以确定是否有消息发布到队列。如何将所有这些产品交付给消费者。

1 个答案:

答案 0 :(得分:0)

虽然这个问题并不完全清楚,但让我解决一下如何(或是否)知道某个特定消息(让我们称之为消息x )是否已传递给消费者的问题。

首先,一些理论。

  • 消息队列通常用于跨网络 - 并且网络可能不可靠。此外,操作消息系统的机器可能不可靠。
  • 通常指定消息队列来处理特定类型的消息。消息本身的处理可能不可靠。
  • 由于上述原因,消息有可能被处理/消费零次或多次(即消息可以丢弃,处理一次或处理不止一次)。

现在,RabbitMQ包含一些尝试减轻可能的故障模式的功能(主要使用确认),但没有任何缓解技术可以100%可靠。因此,虽然可靠性更高,但无法保证 - 您的应用程序需要能够应对偶尔出现故障的可能性。

问题中有一个固有的假设,消息x 的原始发布者关心消息x的消费者 < / em>的。这表明需要双向交换(例如RPC) - 一个从发布者到消费者一个用于消息x ,然后从消费者回到原始发布者(消息y )。当消费者处理消息x 时,原始发布者维护状态,并且消息y 响应的接收关闭了状态机。

如果目的是简单地发布消息流,则发布者既不应该知道消费者也不应该关心消息是否被消费。但是,从应用程序监控的角度来看,您可能会关心。您(作为系统管理员)可以做一些事情来查看是否正在使用消息:

  1. 监控Rab​​bitMQ管理控制台以查看发布/消耗率以及队列长度
  2. 在您的应用程序中设置日志记录和跟踪(可能将日志转储到elasticsearch) - 然后设置日志分析器以检测异常日志条件
  3. 在耗材计算机上设置性能监控 - 如果出现问题,您可能会看到处理器时间和内存使用等变量的异常统计信息
  4. 发送偶尔的测试消息,可以专门配置为在日志中放置标记,并查找该标记。