rabbitmq - 按照发布的确切顺序在消费者处获取消息 - RabbitMQ - MassTransit
问题描述
我正在通过队列传递与付款相关的数据。所以我需要按照我发送的顺序在我的消费者那里接收数据。
示例 - 发布者发布这些消息 - msg1, msg2, msg3...msg8。在消费者没有以正确的顺序发布它......它就像msg1,msg4,msg2,msg7.msg8 ..所有消息都是同一类型..有没有办法在 rabbitmq masstransit 中处理这个?
解决方案
纯粹的发布-订阅消息代理不能保证按设计排序。发布者确认和消费者确认没有顺序,因此消息可以无序发布(尽管您是按顺序执行的)和无序消费。当消息在毒物队列中结束时,下一条消息会被处理,因此按照定义顺序会被破坏。
此外,RMQ 本身保证“至少一次”传递,这意味着您可以从代理处获得两次相同的消息,无序。此外,如果 RMQ 集群因网络故障而被分区,队列的状态将无法正确复制,并且当分区状态得到解决时,分离的节点将重新发送其队列中的所有消息。
只有使用仅附加日志的代理才能支持按顺序交付。例如,您可以使用 Kafka 来做到这一点。这就是由于概念上的不匹配,MassTransit 中的 Kafka 传输被实现为 Rider 而不是普通消息传输的原因。
推荐阅读
- angular - Angular:订阅未检测到更改,因此我的视图未更新
- python - 为什么用旋转调整窗口大小会干扰 UI 布局,包括 kivy 中的图像
- c - 如何修复链表中的传递参数地址错误
- odoo - 根据odoo11中另一个字段的值删除创建和编辑
- javascript - 将 background.js 中的数据存储到 vuex 存储中
- php - 提交表单不将数据存储到数据库
- python - 抽象语法树
- scala - 从scala中的给定字符串返回旋转等价对列表
- html - CSS 是否使用大写 M 作为字体大小的参考?
- javascript - 如何设置按钮元素,以便可以使用箭头键控制它们?