我有一个关于处理消息排序的架构问题。出于这个问题的目的,传输是无关紧要的,所以我不打算指定一个。
假设我们有三个系统,一个网站,一个 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/