我有一个关于处理消息排序的架构问题。出于这个问题的目的,传输是无关紧要的,所以我不打算指定一个。
假设我们有三个系统,一个网站,一个CRM和一个ERP。在本例中,ERP将是数据所有权方面的“主”系统。网站和CRM都可以向ERP系统发送新的客户消息。然后,ERP系统添加一个客户,并用新分配的帐号发布该客户,以便网站和CRM可以将该帐号添加到其本地客户记录中。这是一个非常简单的过程。
接下来,我们继续下单。客户关系管理或网站需要帐号才能向ERP系统下单。但是,即使客户没有帐号,CRM也会允许用户下订单。(对于本例,假设我们不能修改CRM行为)这创造了这样一种可能性:用户可以创建一个新客户,并在CRM中的帐号更新之前下单。
处理这种情况的最佳方法是什么?发送订单消息sans帐号并将其放入错误队列是否最好?让CRM端点保存消息并等待CRM中的帐号更新是不是更好?也许是一些我没有想过的完全不同的东西?
提前感谢您的帮助。
发布于 2010-04-11 16:32:23
我认为CRM对新创建的客户有自己的唯一客户id。此CRM客户id是ERP的外部关键字,它应该出现在ERP->CRM更新中,否则CRM无法关联和更新自己的用户记录。如果这个假设是正确的,您可以在CRM和ERP之间放置一个中间人,使没有帐号的订单在队列中等待,直到它捕获到来自ERP的帐号更新。中间人将使用CRM客户id将等待的订单请求与帐号更新相关联,然后用帐户id丰富订单,并将订单转发给ERP。
如果订单在中间人的队列中停留了太长时间,则应该将其移动到错误/升级队列。
中间人可以在CRM或ERP中或在一些集成平台中实现。
发布于 2010-04-11 11:13:05
您能不能不将“创建新客户和下订单”操作封装到一条消息中,该消息被简单地解构并在ERP系统中按顺序播放?因此,您将有一条“创建新客户”消息、一条“下订单”消息和一条新的“创建客户和下订单”消息。
发布于 2010-04-11 16:53:22
CRM系统应该有自己的帐号,供内部使用。这为您提供了一种在ERP系统创建主帐户之前处理订单的机制。CRM应用程序将ERP帐号作为其客户记录中的唯一键保存;基本上,CRM帐号是一个合成键,而ERP帐号是一个业务键。
在此设计中,CRM向ERP发送New Customer消息和New Order消息。这两条消息都会发送CRM客户编号和一个空的ERP帐号。假设ERP系统只有一个消息队列,则通常的物理定律适用,因此ERP系统应首先处理New Customer消息;它向CRM系统发回一个New Account消息,将CRM客户编号绑定到一个新的ERP帐号。ERP系统需要一个将其客户编号与CRM帐号相关联的数据存储,以便它可以处理在发布ERP帐号之前发送的任何New Order消息。
如果您遇到这样一种情况,即New Order消息在处理New Customer消息之前到达进行处理,则需要将其路由到挂起队列。当ERP系统处理New Customer消息时,它将需要检查挂起队列。实际上,队列可能是错误的术语,因为ERP系统将在所有新订单消息中快速查找与该CRM客户编号匹配的消息。
https://stackoverflow.com/questions/2615895
复制相似问题