聚合器和重排序器

Aggregator在概念上與Splitter相反。它將一系列單獨的訊息聚合成一個訊息,並且必然更復雜。預設情況下,聚合器返回一個包含來自傳入訊息的有效負載集合的訊息。同樣的規則也適用於Resequencer。以下示例展示了分發器-聚合器模式的典型示例。

@Bean
public IntegrationFlow splitAggregateFlow() {
    return IntegrationFlow.from("splitAggregateInput")
            .split()
            .channel(MessageChannels.executor(this.taskExecutor()))
            .resequence()
            .aggregate()
            .get();
}

split()方法將列表拆分成單獨的訊息並將其傳送到ExecutorChannelresequence()方法根據訊息頭中找到的序列詳細資訊對訊息進行重新排序。aggregate()方法收集這些訊息。

但是,您可以透過指定釋出策略和關聯策略等來更改預設行為。考慮以下示例:

.aggregate(a ->
        a.correlationStrategy(m -> m.getHeaders().get("myCorrelationKey"))
            .releaseStrategy(g -> g.size() > 10)
            .messageStore(messageStore()))

前面的示例關聯了帶有myCorrelationKey頭的訊息,並在至少累積十個訊息後釋出這些訊息。

resequence() EIP 方法也提供了類似的 Lambda 配置。

© . This site is unofficial and not affiliated with VMware.