【问题标题】:Integrating with dynamic clients与动态客户端集成
【发布时间】:2018-02-25 00:07:13
【问题描述】:

我有一个建筑设计问题。我们公司最近带来了用于案例管理的 COTS(基于 .NET 的产品)。该产品有一个复杂的集成模块,可以针对每个用户操作将完整的案例信息 XML 输出到 MQ。每个 XML 元素都有一个添加、编辑和删除标志,以了解哪些元素被更改。

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

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

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

谢谢。

【问题讨论】:

    标签: jakarta-ee architecture message-queue


    【解决方案1】:

    一种可能的方法:

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

    注意:只有在成功传递的情况下,公共组件才应将消息标记为已发布。您可能希望等待来自合作伙伴组件的确认。 由于您无法保证该过程中的事务原子性,因此您的合作伙伴客户需要对重复项保持稳健。 您的服务器软件以及每个客户端都应该为每个事件管理一个消息 ID (UUID):

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多