SpringIntegration中丢弃的消息将去向何方?
对于某些过滤器和聚合器,我们有一个丢弃通道,但我们已经看到丢弃通道是一个常规的直接通道 那么,那些被丢弃的消息去了哪里?到DLQSpringIntegration中丢弃的消息将去向何方?,spring,spring-integration,Spring,Spring Integration,对于某些过滤器和聚合器,我们有一个丢弃通道,但我们已经看到丢弃通道是一个常规的直接通道 那么,那些被丢弃的消息去了哪里?到DLQ 还有,他们会永远住在那里吗?因为我们正在努力解决内存消耗问题,我们希望这些消息一到达DLQ就被删除(垃圾收集)。即使Spring Integration基于消息传递概念,它也只是构建集成解决方案的工具。它不是代理,因此不提供开箱即用的状态管理,如队列持久性和DLQ 您是正确的,discardChannel只是一个MessageChannel,您可以在那里注入任何实现,
还有,他们会永远住在那里吗?因为我们正在努力解决内存消耗问题,我们希望这些消息一到达DLQ就被删除(垃圾收集)。即使Spring Integration基于消息传递概念,它也只是构建集成解决方案的工具。它不是代理,因此不提供开箱即用的状态管理,如队列持久性和DLQ
您是正确的,
discardChannel
只是一个MessageChannel
,您可以在那里注入任何实现,并在该通道上的discard流中执行一些所需的逻辑。发送到DLQ已经是您的特定用例,您确实应该手动执行。在该废弃通道上没有特定的Spring集成。如果它只是常规的QueueChannel
而没有任何轮询器,那么你真的只会得到一次OOM
,因为消息永远存储在内存中。Ohhh,这就是我们OOM的情况。我们的丢弃通道是一个常规的直接通道,没有人从中消费。那么,我们应该做些什么来避免OOM呢?我们希望在丢弃通道中的消息到达时直接删除(杀死)这些消息。好吧,这不可能发送到空的(没有订阅者)DirectChannel
,并且没有Dispatcher没有订阅者
异常。我认为还有其他原因导致了OOM
。如果您对丢弃的消息一点也不感兴趣,则确实不需要在过滤器上指定discardChannel
或使用nullChannel
: