Architecture 分布式消息排序
我有一个关于处理消息排序的体系结构问题。对于这个问题,传输是不相关的,所以我不打算具体说明 假设我们有三个系统,一个网站,一个CRM和一个ERP。为此 例如,就数据所有权而言,ERP将是“主”系统。 网站和CRM都可以向ERP发送新的客户信息 系统。然后,ERP系统添加一个客户并发布该客户 使用新分配的帐号,以便网站和CRM 将帐号添加到其本地客户记录中。这是一个美丽的城市 直截了当的过程 接下来我们继续下订单。帐户号码在中是必需的 为CRM或网站订购,以便向ERP系统下订单。 但是,CRM将允许用户下订单,即使 客户缺少帐号。(对于本例,假设我们不能 修改CRM行为)这就产生了用户可以 创建一个新客户,并在获得帐号之前下订单 在CRM中更新 处理这种情况的最佳方法是什么?最好是寄 订单消息sans帐号,并让它进入错误队列? 让CRM端点保存消息并等待是否更好 在CRM中更新帐号之前?也许是什么 完全不同,我没想到Architecture 分布式消息排序,architecture,integration,distributed-computing,Architecture,Integration,Distributed Computing,我有一个关于处理消息排序的体系结构问题。对于这个问题,传输是不相关的,所以我不打算具体说明 假设我们有三个系统,一个网站,一个CRM和一个ERP。为此 例如,就数据所有权而言,ERP将是“主”系统。 网站和CRM都可以向ERP发送新的客户信息 系统。然后,ERP系统添加一个客户并发布该客户 使用新分配的帐号,以便网站和CRM 将帐号添加到其本地客户记录中。这是一个美丽的城市 直截了当的过程 接下来我们继续下订单。帐户号码在中是必需的 为CRM或网站订购,以便向ERP系统下订单。 但是,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系统中内置挂起的队列。