Spring integration 在Spring集成中,如何在没有订户的情况下保持通道中的消息?

Spring integration 在Spring集成中,如何在没有订户的情况下保持通道中的消息?,spring-integration,Spring Integration,我在Spring Integration 4.1项目中有以下设置: 订阅发布订户频道的链 启动/停止链条的服务总线 当我停止该链时,会发生的情况是消息从主题中消失,我希望它们保持在那里,直到该链再次激活(很像JMS队列)。我怎样才能做到这一点 我尝试过这种方法,但从“备份通道”中得到一个错误,指出它没有任何订阅者来处理消息: 1-发布订阅者频道 2-正在停止/启动的链条 3-控制总线网关 4-我添加了一个网桥和一个常规通道作为队列 这是我使用此解决方案时遇到的错误: Caused by:

我在Spring Integration 4.1项目中有以下设置:

  • 订阅发布订户频道的链
  • 启动/停止链条的服务总线
当我停止该链时,会发生的情况是消息从主题中消失,我希望它们保持在那里,直到该链再次激活(很像JMS队列)。我怎样才能做到这一点

我尝试过这种方法,但从“备份通道”中得到一个错误,指出它没有任何订阅者来处理消息:

1-发布订阅者频道

2-正在停止/启动的链条

3-控制总线网关

4-我添加了一个网桥和一个常规通道作为队列

这是我使用此解决方案时遇到的错误:

Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:107)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77)
... 30 more

因此,问题是:我应该如何配置我的频道,以便在再次添加订阅者之前消息仍保留在那里?可能吗?

正确;只需将通道设置为
QueueChannel
(添加
子元素)并将轮询器添加到链中。

好吧,这很尴尬,但我认为我只需要在通道声明中添加
queue
元素,以避免使用
DirectChannel
实现(发送消息时确实需要消费者在场…)谢谢Gary。有一个问题:为什么我需要向链中添加轮询器?因为队列通道需要一个轮询器来提取消息-或者你可以在顶层声明一个默认轮询器,好吧。这种隐式使用不是很直观,但幸运的是,我已经为入站适配器声明了一个轮询器…:)如果默认轮询器不存在,则在初始化过程中会出现一个错误,说明没有轮询器,也没有提供默认轮询器。