Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringIntegration中丢弃的消息将去向何方?_Spring_Spring Integration - Fatal编程技术网

SpringIntegration中丢弃的消息将去向何方?

SpringIntegration中丢弃的消息将去向何方?,spring,spring-integration,Spring,Spring Integration,对于某些过滤器和聚合器,我们有一个丢弃通道,但我们已经看到丢弃通道是一个常规的直接通道 那么,那些被丢弃的消息去了哪里?到DLQ 还有,他们会永远住在那里吗?因为我们正在努力解决内存消耗问题,我们希望这些消息一到达DLQ就被删除(垃圾收集)。即使Spring Integration基于消息传递概念,它也只是构建集成解决方案的工具。它不是代理,因此不提供开箱即用的状态管理,如队列持久性和DLQ 您是正确的,discardChannel只是一个MessageChannel,您可以在那里注入任何实现,

对于某些过滤器和聚合器,我们有一个丢弃通道,但我们已经看到丢弃通道是一个常规的直接通道

那么,那些被丢弃的消息去了哪里?到DLQ


还有,他们会永远住在那里吗?因为我们正在努力解决内存消耗问题,我们希望这些消息一到达DLQ就被删除(垃圾收集)。

即使Spring Integration基于消息传递概念,它也只是构建集成解决方案的工具。它不是代理,因此不提供开箱即用的状态管理,如队列持久性和DLQ


您是正确的,
discardChannel
只是一个
MessageChannel
,您可以在那里注入任何实现,并在该通道上的discard流中执行一些所需的逻辑。发送到DLQ已经是您的特定用例,您确实应该手动执行。在该废弃通道上没有特定的Spring集成。如果它只是常规的
QueueChannel
而没有任何轮询器,那么你真的只会得到一次
OOM
,因为消息永远存储在内存中。

Ohhh,这就是我们OOM的情况。我们的丢弃通道是一个常规的直接通道,没有人从中消费。那么,我们应该做些什么来避免OOM呢?我们希望在丢弃通道中的消息到达时直接删除(杀死)这些消息。好吧,这不可能发送到空的(没有订阅者)
DirectChannel
,并且没有
Dispatcher没有订阅者
异常。我认为还有其他原因导致了
OOM
。如果您对丢弃的消息一点也不感兴趣,则确实不需要在
过滤器上指定
discardChannel
或使用
nullChannel