分布式消息排序

问题描述 投票:3回答:4

我在处理消息排序方面有体系结构问题。出于这个问题的目的,运输是无关紧要的,因此我将不指定它。

假设我们有三个系统,一个网站,一个CRM和一个ERP。为了这例如,就数据所有权而言,ERP将成为“主”系统。网站和CRM都可以向ERP发送新的客户消息系统。然后,ERP系统添加一个客户并发布该客户使用新分配的帐号,以便网站和CRM可以将帐号添加到其本地客户记录中。这是一个漂亮的简单的过程。

接下来,我们继续下订单。帐号为必填项要求CRM或网站通过ERP系统下订单。但是,CRM将允许用户下订单,即使客户缺少帐号。 (对于此示例,假设我们不能修改CRM行为),这可能会导致用户创建一个新客户,并在获取帐号之前下订单CRM中已更新。

处理这种情况的最佳方法是什么?最好发送订单消息没有帐号,然后让它进入错误队列?让CRM端点保留消息并等待会更好直到在CRM中更新帐号?也许有事我从未想过的完全不同?

提前感谢您的帮助。

architecture integration distributed-computing
4个回答
1
投票

我想CRM对于新创建的客户具有自己的唯一客户ID。此CRM客户ID是ERP的外部密钥,应该出现在ERP-> CRM更新中,否则CRM无法关联和更新其自己的用户记录。如果此假设正确,则可以在CRM和ERP之间放置一个中间人,以使没有帐号排队的订单保持排队,直到它捕获到ERP的帐号更新为止。中间人将使用CRM客户ID将等待的订单请求与帐号更新相关联,然后使用该帐号ID丰富订单并将订单转发给ERP。

如果订单在中间人的队列中停留太长时间,则应将其移至错误/升级队列。

中间人可以在CRM或ERP或某些集成平台中实现。


1
投票

CRM系统应具有自己的帐号,供内部使用。这为您提供了一种在ERP系统创建主帐户之前处理订单的机制。 CRM应用程序将ERP帐号作为其客户记录中的唯一密钥;基本上,CRM帐号是一个合成密钥,而ERP帐号是一个商业密钥。

在此设计中,CRM向ERP发送新客户消息和新订单消息。两条消息都发送CRM客户编号和空白的ERP帐号。假设ERP系统只有一个消息队列,则应用通常的物理定律,因此ERP系统应首先处理“新客户”消息;它将新帐户消息发送回CRM系统,将CRM客户编号与新的ERP帐户绑定在一起。 ERP系统需要一个数据存储,该存储将其客户编号与CRM帐号相关联,以便它可以处理在发出ERP帐号之前发送的任何新订单消息。

如果您在处理新客户消息之前遇到新订单消息到达处理的情况,则需要将其路由到待处理队列。当ERP系统处理“新客户”消息时,它将需要检查未决队列。实际上,排队可能是错误的术语,因为ERP系统将对所有新订单消息进行搜索,以寻找与该CRM客户编号匹配的消息。


0
投票

您是否不能将“创建新客户和下订单”操作封装到一条简单的消息中,该消息在ERP系统中简单地被解构并按顺序播放?因此,您将收到“创建新客户”消息,“下订单”消息和新的“创建客户并下订单”消息。


0
投票

队列不适用于服务编排方案。我建议研究Cadence Workflow,这将大大简化实现并提供与交互状态的完全可见性。

监视Cadence编程模型的this presentation

© www.soinside.com 2019 - 2024. All rights reserved.