Jakarta ee 与动态客户端集成

Jakarta ee 与动态客户端集成,jakarta-ee,architecture,message-queue,Jakarta Ee,Architecture,Message Queue,我有一个建筑设计问题。我们公司最近推出了用于案例管理的COTS(.NET产品)。该产品有一个复杂的集成模块,它可以在每个用户操作中将完整的案例信息XML输出到MQ。每个XML元素都有一个Add、Edit和Delete标志,以了解更改了哪些元素 我们必须编写一个应用程序,在这些事件进入时按顺序处理它们,并根据更改的内容有条件地发送给多个外部合作伙伴。与每个外部合作伙伴的接口在他们需要的数据、表示(XML、字符串、json等)和协议(SOAP、REST、MQ、DB调用等)方面是不同的 有人会如何设计

我有一个建筑设计问题。我们公司最近推出了用于案例管理的COTS(.NET产品)。该产品有一个复杂的集成模块,它可以在每个用户操作中将完整的案例信息XML输出到MQ。每个XML元素都有一个Add、Edit和Delete标志,以了解更改了哪些元素

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

有人会如何设计这样的系统以及可以使用什么技术吗?(仅供参考,我们现有的技术堆栈Java/JEE,Weblogic)

附言。 我遇到的主要问题是,如果其中一个合作伙伴失败了,我们不应该阻止其他合作伙伴。同时,任何合作伙伴都不应该失去一个通知

谢谢。

一种可能的方法:

  • COTS将有关应用程序事件的消息放入消息队列
  • 消息生成器组件侦听消息队列并向伙伴数据库查询当前已知的伙伴。对于每个COTS消息,将为每个合作伙伴生成一条事件消息,告知发生了什么。该活动还将有一个“已交付”标志。因此,基本上,您将COTS填充的消息队列转换为N个消息队列,每个伙伴对应一个。您的事件应该是不可变的对象,您可以将它们存储在关系数据库或NoSQL数据库(图中的“消息数据库”)中
  • 应用程序服务器中运行的端点组件不超过N个。当他们到达一个请求时,他们将向一个公共组件(图中的“公共数据检索关注点”)请求新消息。 公共组件查询消息数据库,将消息作为java对象列表移交,端点组件关心序列化。 公共组件还可以使用来自合作伙伴数据库的信息来关注授权
注意:如果消息已成功传递,则公共组件应仅将消息标记为已发布。您可能希望等待来自合作伙伴组件的确认。 由于在该过程中您不能保证事务原子性,因此您的合作伙伴客户机需要对重复的事务具有健壮性。 您的服务器软件以及每个客户端都应该为每个事件管理一个消息ID(UUID):

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

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