在 Spring 集成中对出站适配器的发送操作进行批处理
Batching the send operation on outbound adapter in Spring Integration
我在 Spring 集成流的末尾有一个出站通道适配器(在本例中是 SFTP,但对于 JMS 或 WS 来说是相同的)。通过在每次有消息流动时使用直接通道,它会被同步发送出去。
现在,我需要一直处理消息,直到它们到达出站适配器,但在发送它们之前等待预定的时间间隔。换句话说,批处理发送操作。
我知道 Spring Batch 项目可能会为此提供解决方案,但我需要找到具有 Spring 集成组件(在 int-* 名称空间中)的解决方案
实现此目标的典型模式是什么?
Aggregator
pattern适合你。
在您的特定情况下,我将其称为 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
在我们的例子中)。对于这些选项,请遵循上述文档。
我在 Spring 集成流的末尾有一个出站通道适配器(在本例中是 SFTP,但对于 JMS 或 WS 来说是相同的)。通过在每次有消息流动时使用直接通道,它会被同步发送出去。 现在,我需要一直处理消息,直到它们到达出站适配器,但在发送它们之前等待预定的时间间隔。换句话说,批处理发送操作。 我知道 Spring Batch 项目可能会为此提供解决方案,但我需要找到具有 Spring 集成组件(在 int-* 名称空间中)的解决方案 实现此目标的典型模式是什么?
Aggregator
pattern适合你。
在您的特定情况下,我将其称为 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
在我们的例子中)。对于这些选项,请遵循上述文档。