architecture - 分布式消息排序

标签 architecture integration distributed-computing

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

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

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

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

在此先感谢您的帮助。

最佳答案

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

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

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

关于architecture - 分布式消息排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2615895/

相关文章:

javascript - AngularJS 不适用于 Paypal

node.js - NodeJS分布式处理(分区-集群)

c# - 如何在不违反 MVC 模式的情况下实现缓存模型?

design-patterns - 一些架构模式的简单代码实现

Oracle 高级排队体验

php - PHP 应用程序和 Ruby 应用程序之间的通信、传递信息

wordpress - 什么是好的 WordPress 插件架构?

c# - CQRS 应用程序中的缓存失效

scala - Spark 缓存 : RDD Only 8% cached

distributed-computing - 在 2PC 中如果提交失败会发生什么?