分布式消息排序

时间:2010-04-11 03:02:04

标签: architecture integration distributed-computing

我有一个关于处理消息排序的架构问题。出于这个问题的目的,传输是无关紧要的,所以我不打算指定一个。

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

接下来我们继续下订单。帐号是必需的 订购CRM或网站向ERP系统下订单。 然而,即使是,CRM也允许用户下订单 客户缺少帐号。 (对于这个例子假设我们不能 修改CRM行为)这创造了用户可以的可能性 创建新客户,并在帐号到达之前下订单 在CRM中更新。

处理此方案的最佳方法是什么?发送是否最好? 订单消息没有账号,让它进入错误队列? 让CRM端点保持消息并等待会更好吗? 直到帐户号在CRM中更新?也许是什么 完全不同于我没有想过的?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

我认为CRM为新创建的客户拥有自己独特的客户ID。此CRM客户ID是ERP的外部密钥,它应该存在于ERP-> CRM更新中,否则CRM无法关联和更新其自己的用户记录。如果这种假设是正确的,那么您可以在CRM和ERP之间放置一个中间人,使订单中没有帐号等待排队,直到它从ERP中获取帐号更新。中间人将使用CRM客户ID将等待订单请求与帐号更新相关联,然后使用帐户ID丰富订单并将订单转发给ERP。

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

您是否可以将“创建新客户和下订单”操作封装到一个简单解构并在ERP系统中按顺序播放的单个消息中?因此,您将拥有“创建新客户”消息,“下订单”消息以及新的“创建客户和地点订单”消息。

答案 3 :(得分:0)

队列不适用于服务编排方案。我建议您研究Cadence Workflow,这将大大简化实施过程,并全面了解您的互动状态。

观看this presentation,其中描述了Cadence编程模型。