按照发布的确切顺序获取消费者的消息 - RabbitMQ - MassTransit
Get messages at consumer at exact order that was published - RabbitMQ - MassTransit
我正在通过队列传递支付相关数据。所以我需要按照我发送的相同顺序在我的消费者处接收数据。
示例 - 发布者发布这些消息 - msg1、msg2、msg3...msg8。在消费者处,我没有按照正确的发布顺序获取它...它就像 msg1,msg4,msg2,msg7.msg8.. 所有消息都是相同类型的.. 有吗有什么方法可以在 rabbitmq masstransit 中处理这个问题?
纯粹的 pub-sub 消息代理不能保证设计的顺序。发布者确认和消费者确认没有顺序,因此消息可以乱序发布(尽管您按顺序执行)和乱序消费。当有毒队列中的一条消息结束时,将处理下一条消息,因此顺序按定义被打破。
此外,RMQ 本身保证“至少一次”传递,这意味着您可以从代理处获得两次相同的消息,无序。此外,如果 RMQ 集群因网络故障而分区,队列的状态将无法正确复制,并且当分区状态得到解决时,分离的节点将重新发送其队列中的所有消息。
只有使用仅附加日志的代理才能支持有序交付。例如,您可以使用 Kafka 来做到这一点。由于概念上的不匹配,这就是 MassTransit 中的 Kafka 传输被实现为 Rider 而不是普通消息传输的原因。
我正在通过队列传递支付相关数据。所以我需要按照我发送的相同顺序在我的消费者处接收数据。
示例 - 发布者发布这些消息 - msg1、msg2、msg3...msg8。在消费者处,我没有按照正确的发布顺序获取它...它就像 msg1,msg4,msg2,msg7.msg8.. 所有消息都是相同类型的.. 有吗有什么方法可以在 rabbitmq masstransit 中处理这个问题?
纯粹的 pub-sub 消息代理不能保证设计的顺序。发布者确认和消费者确认没有顺序,因此消息可以乱序发布(尽管您按顺序执行)和乱序消费。当有毒队列中的一条消息结束时,将处理下一条消息,因此顺序按定义被打破。
此外,RMQ 本身保证“至少一次”传递,这意味着您可以从代理处获得两次相同的消息,无序。此外,如果 RMQ 集群因网络故障而分区,队列的状态将无法正确复制,并且当分区状态得到解决时,分离的节点将重新发送其队列中的所有消息。
只有使用仅附加日志的代理才能支持有序交付。例如,您可以使用 Kafka 来做到这一点。由于概念上的不匹配,这就是 MassTransit 中的 Kafka 传输被实现为 Rider 而不是普通消息传输的原因。