2010-04-11 65 views
3

我有处理消息排序的体系结构问题。对于这个问题,运输是无关紧要的,所以我不打算指定一个。分布式消息订购

假设我们有三个系统,一个网站,一个CRM和一个ERP。例如,在数据所有权方面,ERP将成为“主”系统。 网站和CRM都可以向ERP系统发送新的客户消息。然后ERP系统添加一个客户,并发布客户 与新分配的帐号,以便网站和客户关系管理可以 将帐号添加到他们的本地客户记录。这是一个非常简单的过程。

接下来我们继续下订单。 CRM或网站向 订购ERP系统时需要帐号。 但是,即使客户缺少账号,CRM也将允许用户下单。 (对于此示例,假设我们不能 修改CRM行为)这会创建一个可能性,即用户可能创建新客户并在CRM中更新帐号前获得订单 。

处理这种情况的最佳方法是什么?最好发送 订单消息的sans帐号并让它进入错误队列? 让客户关系管理终端持有该消息并等待 直到在CRM中更新帐号为止会更好吗?也许 完全不同,我没有想到?

在此先感谢您的帮助。

+0

如果帐号不是您将这三个系统绑定在一起的唯一键,那么是什么?当ERP系统创建账号时,如何知道CRM中需要更新的记录?如果有人在设置帐号之前更正了CRM系统中的名称,那会失败吗? – 2010-04-11 04:26:17

回答

1

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

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

中间人可能会在CRM或ERP中或某个集成平台中实施。

+0

这两个答案都来自APC提供了类似的解决方案,但是我认为我喜欢外部中间人服务的想法,该服务处理无序消息与内置于ERP系统中的挂起队列。 – sbanwart 2010-04-11 20:05:13

0

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

+0

我想避免创建一堆额外的消息类型,如果我可以帮助它。不过,如果没有更好的方法处理这个问题,我愿意接受这个选择。 – sbanwart 2010-04-11 03:59:59

1

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

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

如果您遇到新订单消息在新客户消息处理之前到达要处理的情况,您需要将其路由到未决队列。当ERP系统处理新客户消息时,则需要检查待处理队列。事实上,队列可能是错误的,因为ERP系统将会颠覆所有新订单消息寻找与CRM客户编号相匹配的消息。