Spring集成架构/设计澄清帮助需要

时间:2016-06-09 11:36:34

标签: spring jms spring-integration

我们正在为我们未来的产品之一开发POC,我们有如下要求。

主要应用

  1. 来自db的轮询订单ID,一旦轮询就更新其状态
  2. 将订单拆分为每个产品ID。根据某些业务规则检查该产品ID的有效性。
  3. 将所有有效的产品ID作为消息发送到频道
  4. 等待工作人员应用的响应,并将状态更新为已完成或失败。
  5. 工人应用

    1. 将产品ID添加为消息
    2. 将其发送给所有固定的收件人列表
    3. 每个收件人在将其发送给集成合作伙伴(外部Web服务)之前验证其自己的规则
    4. 发送到外部服务后,等待配置的响应时间。收集响应并执行一些特定于数据库的工作来存储响应。
    5. 所有收件人完成后,需要将响应发送到主应用程序,以便它可以更新主要产品ID的状态。
    6. 为实现这一目标,我们在工作者应用程序上开发了spring spring集成app和spring JMS listener。

      主应用程序是纯粹的spring集成应用程序,我们使用了db poller和jms出站网关。

      工作者应用程序是我需要一些建议的地方,到目前为止我使用的是什么,spring default message listener(消息驱动的pojo) 从jms队列中获取消息。一旦拿起,将其发送到收件人的固定列表。 从这里开始,每个spring / spring集成组件处理流以根据业务规则验证msg并将其发送到Web服务。 收到响应或发生超时后,我们会更新db以跟踪每个产品ID及其状态和响应数据。

      现在我的问题从这里开始,我如何通知主应用程序所有固定的集成列表已完成以便主应用程序 可以更新订单状态。

      另外请记住,当单个MDB(spring pojo msg listener)选中时,每个产品都会被发送到3-4个差异Web服务。 因此,如果订单有3个项目,那么这些项目将被发送到至少9个差异服务。

      任何人都可以建议我如何处理聚合策略?

1 个答案:

答案 0 :(得分:0)

  

现在我的问题从这里开始,我如何通知主应用程序已经完成所有固定的集成列表,以便主应用程序可以更新订单状态。

您可以使用相同的JMS消息侦听器方法,其中Worker应用程序将其结果生成到队列,而主应用程序只是侦听该队列并为所需数据选取消息。 <int-jms:message-driven-channel-adapter>适合您。

  

当单个MDB(spring pojo msg listener)接收时,每个产品将被发送到3-4个差异Web服务。

如果您将所有这些服务发送给<puiblish-subscribe-channel>,我们可以通过applySequence = true上的内置<puiblish-subscribe-channel>选项和默认CorrelationStrategy获得收益<aggregator>

其他一切听起来都不错。