【发布时间】:2017-11-29 15:08:57
【问题描述】:
我有两个队列,它们都有不同的数据类型,它们在我的应用程序处理时会相互影响,因此异步处理来自两个队列的消息会导致数据完整性问题。
我很好奇确保在任何给定时间只有一位消费者在消费的最佳做法。以下是我到目前为止的总结:
EventMessages 接收有关外部事件的信息,这些事件可能会或可能不会对排队/现有的PurchaseOrderMessages 产生影响。
由于我们预计我们将消耗更多 PurchaseOrderMessage 而不是 EventMessage,也许我们应该在处理 PurchaseOrderMessage 队列中的任何内容之前确保 EventMessage 队列为空(通过 API) - 但这样会得到进入等待时间等问题,这一切都需要尽可能接近实时发生。
如果有一种方法可以简单地暂停 Consumer A 直到 Consumer B 处于静止状态,这可能是最简单的解决方案,我只是不太确定我需要朝哪个方向发展。
更新
为了提供一些额外的上下文,PurchaseOrderMessage 将包含起点和终点。
EventMessage 还包含位置数据。
每次处理PurchaseOrderMessage 时,它都会查询当前EventMessage 记录中与PurchaseOrder 的起点和终点相匹配的任何Event 位置并创建关联。
每次处理EventMessage 时,它都会查询当前PurchaseOrderMessage 记录以查找与Event 匹配的任何目的地来源并创建关联。
如果同步队列不是一个好的解决方案,当EventMessages 和PurchaseOrderMessages 同时发布到应用程序时,还有什么替代方法可以确保不会遗漏任何关联?
更新 2
最终,此数据将提供一个 UI,该 UI 将包含 PurchaseOrders 列表以及可能影响其交付日期的事件。由于最终用户正在渲染/检索PurchaseOrder 数据,因此执行“事件检查”会太慢,这就是我们想要在处理/使用它们时执行它的原因。
【问题讨论】:
-
目前还不清楚您的消息的哪一部分需要同步。我的猜测是您需要重新设计服务的设计。
-
存储关联的目的是什么?
-
另一个好问题!我已经用该信息更新了问题。
-
那很好,但我还是不明白。采购订单队列完成了什么,为什么事件会影响队列中的某些内容?
-
为了继续 DisneyExample 主题,我从在线迪士尼商店订购了一些米老鼠拖鞋 (PurchaseOrder),从洛杉矶运送到纽约,但事实证明在纽约配送中心可能会影响我的交货估算。我希望能够查看我的所有订单并查看可能影响他们准时到达目的地的事件
标签: rabbitmq queue message-queue