在 Spring 集成中对出站适配器的发送操作进行批处理

Batching the send operation on outbound adapter in Spring Integration

我在 Spring 集成流的末尾有一个出站通道适配器(在本例中是 SFTP,但对于 JMS 或 WS 来说是相同的)。通过在每次有消息流动时使用直接通道,它会被同步发送出去。 现在,我需要一直处理消息,直到它们到达出站适配器,但在发送它们之前等待预定的时间间隔。换句话说,批处理发送操作。 我知道 Spring Batch 项目可能会为此提供解决方案,但我需要找到具有 Spring 集成组件(在 int-* 名称空间中)的解决方案 实现此目标的典型模式是什么?

Aggregatorpattern适合你。

在您的特定情况下,我将其称为 window,因为您与群组消息没有任何特定关联,但只需要构建一个 batch 即可。

所以,我认为您的聚合器配置可能如下所示:

<int:aggregator input-channel="input" output-channel="output"
    correlation-strategy-expression="1"
    release-strategy-expression="size() == 10"
    expire-groups-upon-completion="true"
    send-partial-result-on-expiry="true"/>
  • correlation-strategy-expression="1" 表示 group 任何传入消息
  • release-strategy-expression="size() == 10"允许按10条消息形成和发布批次
  • expire-groups-upon-completion="true" 告诉聚合器从它的存储中删除发布组。这允许为相同的 correlationKey(在我们的例子中是 1
  • 创建一个新组
  • send-partial-result-on-expiry="true" 指定当我们没有足够的消息来构建整个批次(大小10 在我们的例子中)。对于这些选项,请遵循上述文档。