Architecture 分布式消息排序

Architecture 分布式消息排序,architecture,integration,distributed-computing,Architecture,Integration,Distributed Computing,我有一个关于处理消息排序的体系结构问题。对于这个问题,传输是不相关的,所以我不打算具体说明 假设我们有三个系统,一个网站,一个CRM和一个ERP。为此 例如,就数据所有权而言,ERP将是“主”系统。 网站和CRM都可以向ERP发送新的客户信息 系统。然后,ERP系统添加一个客户并发布该客户 使用新分配的帐号,以便网站和CRM 将帐号添加到其本地客户记录中。这是一个美丽的城市 直截了当的过程 接下来我们继续下订单。帐户号码在中是必需的 为CRM或网站订购,以便向ERP系统下订单。 但是,CRM将允

我有一个关于处理消息排序的体系结构问题。对于这个问题,传输是不相关的,所以我不打算具体说明

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

接下来我们继续下订单。帐户号码在中是必需的 为CRM或网站订购,以便向ERP系统下订单。 但是,CRM将允许用户下订单,即使 客户缺少帐号。(对于本例,假设我们不能 修改CRM行为)这就产生了用户可以 创建一个新客户,并在获得帐号之前下订单 在CRM中更新

处理这种情况的最佳方法是什么?最好是寄 订单消息sans帐号,并让它进入错误队列? 让CRM端点保存消息并等待是否更好 在CRM中更新帐号之前?也许是什么 完全不同,我没想到


提前感谢您的帮助。

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

我想CRM对于新创建的客户有自己独特的客户id。此CRM客户id是ERP的外部密钥,它应该出现在ERP->CRM更新中,否则CRM无法关联和更新其自己的用户记录。如果这个假设是正确的,您可以在CRM和ERP之间设置一个中间人,使订单不必排队等待帐号,直到它从ERP捕获帐号更新。中间人将使用CRM客户id将等待订单请求与账号更新关联起来,然后使用账户id充实订单并将订单转发给ERP

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


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

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

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


如果新订单消息在处理新客户消息之前到达处理,则需要将其路由到挂起队列。当ERP系统处理新的客户消息时,它需要检查挂起的队列。事实上,也许队列是一个错误的术语,因为ERP系统将对所有新订单消息进行翻阅,以查找与CRM客户编号匹配的消息。

队列不适合服务编排场景。我建议您深入研究这一点,这将大大简化实现,并让您完全了解交互的状态


请注意描述Cadence编程模型的内容。

如果我能提供帮助,我希望避免创建大量额外的消息类型。然而,如果没有更好的方法来处理这个问题,我愿意接受这个选择。如果帐号不是将这三个系统绑定在一起的唯一密钥,那么它是什么?当ERP系统创建帐号时,它如何知道CRM中要更新的记录?如果有人在设置账号之前更正了CRM系统中的名称,会失败吗?这两个答案都与APC提供的解决方案类似,但我认为我喜欢外部中间商服务的想法,该服务处理无序消息,而不是在ERP系统中内置挂起的队列。