如何在Spring Integration中运行并行聚合器?

时间:2014-12-16 15:06:56

标签: parallel-processing spring-integration enterprise-integration

我想运行Spring Integration流程,如果达到任何容量,我可以轻松扩展组件实例。

特别是,我想知道如何在以下场景中扩展聚合器:聚合器层之前的各种组件生成类X的对象的不同部分 - 让我们说它们生成两个这样的对象的一部分X 1 ,X 2 - 部分称为{a 1 ,b 1 }和{a 2 ,b 2 }。聚合器现在应该从它们的部件构造X 1 和X 2 并发送它们。我们还假设有两个聚合器,A 1 和A 2

enter image description here

如何最轻松地进行设置以使其按预期工作,即创建并发送X 1 和X 2

我看到以下注意事项:

  • 1 获得 1 ,A 2 获得b 1 ,X 1 < / sub>不能在这里构建一些额外的东西。
  • 我们想要一些负载平衡,这就是首先出现多个聚合器的原因。
  • 如果需要,应轻松添加额外聚合器 - 应避免聚合器数量的静态配置。

我想知道以下内容是否对我有用 - 这是基于Spring Integration文档,但我不确定我是否做得好。

  1. 设置Redis Message Store,其中X 1 和X 2 的部分将在全部可用之前存储。
  2. 在所有Aggregator实例之间共享邮件存储。这是在Aggregator configuration
  3. 中设置(6)
  4. (通常用于聚合器)使用相同的CORRELATION_ID标记相同X的部分(a&#39; s和b&#39; s)。根据已收到的a和b写出ReleaseStrategy。
  5. 创建Redis Lock Registry并配置所有聚合器以使用它。这是在Aggregator configuration
  6. 中设置(20) 这会吗?特别是:

    1. 我可以在多个聚合器之间共享MessageStore吗?
    2. 当共享MessageStore时,如果A 1 1 写入其中并且A 2 写入b 1 ,我的ReleaseStrategy会看到X 1 现在可以组装吗?
    3. 只有一个聚合器使用ReleaseStrategy处理聚合并发送已组装的X,因为我使用了锁?
    4. 非常感谢!

1 个答案:

答案 0 :(得分:2)

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

而且,是的,锁定(correlationId)确保只有一个聚合器可以同时处理一个组。

  

...因为我使用锁......

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