Parallel processing 如何在Spring集成中运行并行聚合器?

Parallel processing 如何在Spring集成中运行并行聚合器?,parallel-processing,spring-integration,enterprise-integration,Parallel Processing,Spring Integration,Enterprise Integration,我想运行一个Spring集成流,在这里,如果达到任何组件的容量,我可以轻松地扩展组件的实例 特别是,我想知道如何在下面的场景中扩展聚合器:聚合器层之前的各种组件生成类X对象的不同部分——假设它们生成两个这样的对象X1、X2的部分——这些部分分别称为{a1、b1}和{a2、b2}。聚合器现在应该从它们的部分构造X1和X2并发送它们。我们还假设有两个聚合器,A1和A2 如何才能最轻松地设置它,使其按预期工作,即创建并发送X1和X2? 我认为有以下考虑: A1得到A1,A2得到b1,没有额外的东西

我想运行一个Spring集成流,在这里,如果达到任何组件的容量,我可以轻松地扩展组件的实例

特别是,我想知道如何在下面的场景中扩展聚合器:聚合器层之前的各种组件生成类X对象的不同部分——假设它们生成两个这样的对象X1、X2的部分——这些部分分别称为{a1、b1}和{a2、b2}。聚合器现在应该从它们的部分构造X1和X2并发送它们。我们还假设有两个聚合器,A1和A2

如何才能最轻松地设置它,使其按预期工作,即创建并发送X1和X2?

我认为有以下考虑:

  • A1得到A1,A2得到b1,没有额外的东西X1不能被构造
  • 我们需要一些负载平衡,这就是为什么首先需要多个聚合器
  • 如果需要,可以很容易地添加额外的聚合器-避免聚合器数量的静态配置

我想知道下面的内容是否适合我——这是基于Spring集成文档的,但我不确定是否正确

  • 设置一个,X1和X2的部分在全部可用之前将被存储
  • 在所有聚合器实例之间共享消息存储。这是中的设置(6)
  • (对于聚合器来说,通常情况下)使用相同的关联ID标记相同X的部分(a和b)。基于已接收到的a和b写入释放策略
  • 创建并配置所有聚合器以使用它。这是中的设置(20)
  • 这样行吗?特别是:

  • 我可以在多个聚合器之间共享MessageStore吗
  • 共享MessageStore时,如果A1将A1写入其中,A2将b1写入其中,我的ReleaseStrategy会看到X1现在已经准备好组装了吗
  • 是否只有一个聚合器使用ReleaseStrategy处理聚合并发送组装好的X,因为我使用的是锁

  • 非常感谢

    是的,它可以工作,但您不需要Redis,除非您需要持久性或者您的聚合器在不同的框上运行(但请参见下文);您可以在聚合器之间共享相同的
    SimpleMessageStore
    。默认情况下,每个聚合器使用自己的内存
    SimpleMessageStore

    是的,锁(通过
    correlationId
    )确保只有一个聚合器同时处理一个组

    。。。因为我用的是锁

    聚合器在内部使用自己的锁,您不需要自己锁定任何东西。事实上,通过一个全局的
    LockRegistry
    (gemfire、redis、定制实现)和一个持久消息组存储(redis等),您的聚合器可以在不同的JVM上运行