2017-05-16 49 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#信道专用信道 –