2017-05-16 47 views
1

我們對某些過濾器和聚合器有一個丟棄通道,但我們已經看到丟棄通道是一個常規的直接通道。SpringIntegration中丟棄的消息在哪裏?

那麼,那些被丟棄的信息去哪裏?到DLQ?

而且,他們是否永遠活在那裏?由於我們正在努力處理內存消耗,我們希望這些消息儘快到達DLQ時被刪除(垃圾收集)。

回答

1

即使Spring Integration基於消息傳遞概念,它也只是一個構建集成解決方案的工具。它不是Broker,因此不提供隊列持久性和DLQ等開箱即用的狀態管理。

你是正確的,discardChannel只是一個MessageChannel,你可以在那裏注入任何實現和做一些所需的邏輯在該通道的廢棄流。發送到DLQ已經是您特定的用例,您應該手動執行此操作。在該丟棄通道上沒有特定的Spring Integration。如果這只是常規的QueueChannel而沒有任何問題,那麼你真的會因爲消息永遠存儲在內存中而最終結束一次OOM

+0

哦,這就是發生在我們身上的事情。 – JonathanVila

+0

而我們的Discard頻道是一個普通的直播頻道,沒有人從中消費。 **那麼,我們必須做些什麼來避免OOM?**我們希望在丟棄頻道到達時直接刪除(殺死)這些消息。 – JonathanVila

+0

那麼,這是不可能發送到空(無訂戶)的'DirectChannel',並沒有'分派器沒有訂戶'異常。我認爲還有其他的東西導致這個「OOM」。如果你對丟棄的消息根本不感興趣,你真的不需要在'filter'上指定'discardChannel'或者使用'nullChannel':http://docs.spring.io/spring-integration/docs/電流/參考/ HTML /消息通道-section.html#信道專用信道 –