【问题标题】:MassTransit with RabbitMQ: When is a message moved to the error queue使用 RabbitMQ 的 MassTransit:何时将消息移至错误队列
【发布时间】:2013-12-29 03:35:39
【问题描述】:

我使用的是 RabbitMQ 3.0.2 版,我在错误队列中看到接近 1000 条消息。我想知道

  1. 消息何时移至错误队列?
  2. 有没有办法知道为什么某条消息被移动到错误队列中?
  3. 有没有办法将消息从错误队列移动到正常队列?

谢谢

【问题讨论】:

    标签: rabbitmq message-queue masstransit


    【解决方案1】:

    为了补充 Travis 的回答,在我的开发过程中,我发现消息进入错误队列的其他一些原因:

    1. 发布的消息类型没有消费者
    2. SAGA 和消费者期望相同的具体消息类型。即使您尝试使用“Accepts”和“.Selected”进行区分,SAGA 和 Consumer 也不应该被编程为接收相同的消息类型。

    【讨论】:

    • 没有消费者也为我将消息推送到错误队列。
    【解决方案2】:
    1. a) 他们未能反序列化或 b) 消费者抛出异常处理该消息五次
    2. 不是真的...如果您查看队列中的消息,有效负载标头可能包含注释,但我认为我们没有这样做。如果您打开日志记录(NLog、log4net 等),您应该能够在日志中看到异常。您必须在那时关联消息 ID 以找出确切原因。
    3. 没有通过 MassTransit 的内置方式。主要是因为似乎没有一种很好的通用方法来处理这个问题。每个人都想要一些围绕这个的过程。 Dru 确实创建了一个 BusDriver 应用程序(在 main MT source repo 中),可用于将消息移回相关的交换。这个默认行为是存在的,所以如果你不投入基础设施来处理它,你至少知道事情已经失败了。

    【讨论】:

    • 嗨,特拉维斯,谢谢您的回复。就我而言,在 100 条消息中,有 10 条被移至错误队列。现在我不明白为什么只有很少的消息会因为反序列化而失败,为什么消费者会抛出异常。我认为我们需要启用日志记录以便更好地理解。
    • 反序列化可能存在错误 - 但通常只有在您不使用 MT 将数据放入交换中时才会发生这种情况。很可能你的消费者正在抛出异常。祝你好运,日志记录可能是您了解正在发生的事情的第一步。文档应该有所帮助:masstransit.readthedocs.org/en/master/overview/logging.html
    • 感谢您对此的解释。但是您共享的链接是针对 MassTransit 而不是记录 RabbitMQ。可能是我错了,但我认为我们应该记录 RabbitMQ 错误
    • 错误队列不是 RabbitMQ 错误,而是应用程序错误。您可以通过rabbitmq.com/relocate.html 找到您的 RabbitMQ 日志
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多