与动态客户端集成

时间:2017-09-15 18:36:56

标签: java-ee architecture message-queue

我有一个建筑设计问题。我们公司最近为Case管理带来了一个COTS(基于.NET的产品)。该产品具有复杂的集成模块,可在每个用户操作上向MQ发出完整的案例信息XML。每个XML元素都有一个Add,Edit&删除标志以了解哪些元素已更改。

我们必须编写一个应用程序,在这些事件进入时按顺序处理这些事件,并根据已更改的内容有条件地发送给多个外部伙伴。与每个外部合作伙伴的接口在它们需要的数据,表示(XML,字符串,json等)和协议(SOAP,REST,MQ,DB调用等)方面是不同的。

有关如何设计这样的系统以及可以使用哪些技术的任何建议? (仅供参考,我们现有的技术堆栈Java / JEE,Weblogic)。

PS。 我遇到的主要问题是,如果其中一个合作伙伴失败,我们就不应该拒绝其他合作伙伴。同时,任何合作伙伴都不应该丢失任何通知。

谢谢。

1 个答案:

答案 0 :(得分:1)

可能的方法:

enter image description here

  • COTS将有关应用程序事件的消息放入消息队列。
  • 消息生成器组件侦听消息队列,并向合作伙伴数据库查询当前已知的合作伙伴。对于每个COTS消息,将为每个合作伙伴生成一条事件消息,通知发生了什么。该活动还将有一个"交付"旗。基本上,您将由COTS填充的消息队列转换为N个消息队列,每个伙伴一个消息队列。您的事件应该是不可变对象,您可以将它们存储在关系数据库或NoSQL数据库中("消息数据库"在图片中)。
  • 您的应用程序服务器中运行N个或更少的端点组件。当他们到达请求时,他们会询问新消息的共同组件("公共数据检索问题"在图片中)。 公共组件查询消息DB,将消息作为java对象列表移交,端点组件关注序列化。 公共组件还可以使用合作伙伴数据库中的信息来关注授权。

注意:公共组件应仅标记已发布的邮件(如果已成功传递)。您可能希望等待来自合作伙伴组件的确认。 由于您无法在此过程中保证事务性atomicy,因此您的合作伙伴客户端需要具有针对重复项的强大功能。 您的服务器软件以及每个客户端应管理每个事件的消息ID(UUID):

  • 您的工作是关心为每个事件消息生成唯一ID

  • 您的合作伙伴的工作是维护一个查找表,以检查他们是否已经处理了具有特定ID的evenet。