【问题标题】:How do I find if rabbitmq delivered a particular message to consumer如何查找rabbitmq 是否将特定消息传递给消费者
【发布时间】:2015-03-13 07:00:58
【问题描述】:

我已经完成了 RabbitMQ 队列抄送,以了解是否有消息发布到队列。我如何知道它们是否都已交付给消费者。

【问题讨论】:

  • 除非你实现了某种 RPC,否则没有办法知道。
  • 你的意思是用erlang写一些东西。你能解释一下怎么做吗?
  • 不清楚这个问题在问什么。如果消息不在队列中,则表示它已被传递。

标签: rabbitmq


【解决方案1】:

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

首先,一些理论。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多