2017-04-20 54 views
1

我們有一個聚集器,其中包含一個用於計算丟棄消息的丟棄通道(在達到具體數字時觸發操作)。春季集成 - 聚合器中的過期消息組重新過期3次

但看着日誌我看到,MessageGroup獲取過期3次爲每個消息組,我不明白爲什麼。

我的預期行爲是,當郵件過期時,它將從聚合器中刪除,並且不會在路由中重新引入。

這是我的聚合:

<int:aggregator id="aggregatorByBatchAndSku" 
input-channel="productAggregatorChannel" 
output-channel="productAggregatedChannel" 
expire-groups-upon-completion="true" 
release-strategy="mainAggregatorReleaseStrategy" 
release-strategy-method="canRelease" 
correlation-strategy-expression="headers[${rip.headers.batchno.name}]+headers[${rip.headers.skuid.name}]" 
discard-channel="aggregatorDiscardChannel" 
send-partial-result-on-expiry="false" 
group-timeout="${rip.config.aggregator.group_timeout}" 
expire-groups-upon-timeout="true" 
/> 

回答

1

我得到了這樣的根本原因。

在Aggregator使用discard-channel之後,我有一個Service Activator統計消息,然後輸出到另一個通道,路由在那裏結束。

激活DEBUG模式我看到MessageGroup被重新分派,因爲沒有使用者被附加到那個最終通道。


2017-04-20 12:12:08.987 DEBUG 15272 --- [sk-scheduler-10] .s.i.a.AbstractCorrelatingMessageHandler : The MessageGroup [ 666110005888011] is rescheduled by the reason: Dispatcher has no subscribers for channel 'application:test:-1.fakeChannel'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers 
2017-04-20 12:12:08.987 DEBUG 15272 --- [sk-scheduler-10] .s.i.a.AbstractCorrelatingMessageHandler : Schedule MessageGroup [ SimpleMessageGroup{groupId=666110005888011, messages=[GenericMessage [payload=..... 

因此,該解決方案是讓ServiceActivator作爲終止元件沒有返回任何值。

+0

嗯。我不喜歡那種情況。至少必須在警告下記錄。請提出有關此事的JIRA並將修改該行爲 –

+0

行。這裏我們去:https://jira.spring.io/browse/INT-4259! –