如何在 Spring 集成中将消息保留在没有订阅者的频道中?
How to keep messages in channel with no subscriber in Spring Integration?
我在 Spring Integration 4.1 项目中有以下设置:
- 一条链订阅了一个发布-订阅通道。
- starts/stops 链的服务总线。
当我停止链时发生的事情是消息从主题中消失,我希望它们保留在那里直到链再次被激活(很像 JMS 队列)。我怎样才能实现这种行为?
我已经尝试过这种方法,但我从 "back up channel" 收到错误消息,指出它没有任何订阅者来处理消息:
1 - 发布订阅者通道
2 - 链是 stopped/started
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/>
子元素)并向链中添加一个轮询器。
我在 Spring Integration 4.1 项目中有以下设置:
- 一条链订阅了一个发布-订阅通道。
- starts/stops 链的服务总线。
当我停止链时发生的事情是消息从主题中消失,我希望它们保留在那里直到链再次被激活(很像 JMS 队列)。我怎样才能实现这种行为?
我已经尝试过这种方法,但我从 "back up channel" 收到错误消息,指出它没有任何订阅者来处理消息:
1 - 发布订阅者通道
2 - 链是 stopped/started
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/>
子元素)并向链中添加一个轮询器。