【问题标题】:EasyNetQ - Message order of deliveryEasyNetQ - 消息传递顺序
【发布时间】:2014-08-11 10:10:14
【问题描述】:

来自RabbitMQ - Message order of delivery

AMQP 0-9-1 核心规范的第 4.7 节解释了 保证排序的条件:发布的消息 一个通道,经过一个交换和一个队列和一个 传出通道将按照与它们相同的顺序被接收 发送。自 2.7.0 版以来,RabbitMQ 提供了更强大的保证。

这适用于 EasyNetQ 吗?我原以为它会保持不变,但我有时(但并非总是)会看到不同的行为。

如果消费者是同步的(还不是我的情况;我有锁定但它在“如果”之后开始,在这种情况下总是错误的),我应该相信消息按照发布的顺序被消费吗? (相同类型的消息,相同的来源,到达相同的目的地)或者 EasyNetQ 内部是否还有其他元素在起作用,我应该注意哪些不保留消息传递顺序?

【问题讨论】:

    标签: rabbitmq easynetq


    【解决方案1】:

    EasyNetQ 为每个 IBus 实例实现一个消费者线程,因此如果您使用标准的非异步订阅方法,您的消息处理程序将按照 RabbitMQ 传递消息的相同顺序同步触发。应该不需要实现锁。如果您使用异步订阅,处理程序仍将按顺序调用,但当然,根据您实现异步处理程序的方式,它们可能会乱序 ACK。

    【讨论】:

    • 有两个不同的应用消费同一个消息队列,如何保证只有一个应用消费一条消息。 (两个应用程序都会监听队列,如果其中一个失败另一个继续消费,如果其中一个正在消费另一个等待)
    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 2021-06-19
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-01
    相关资源
    最近更新 更多