2015-04-23 30 views
2

我有以下設置在Spring集成4.1項目:如何在春季集成中沒有訂閱者的通道中保留消息?

  • 訂閱發佈 - 訂閱通道鏈。
  • 啓動/停止鏈條的服務總線。

當我停止鏈接時,會發生什麼消息從消息中消失,我希望他們留在那裏,直到鏈再次激活(很像JMS隊列)。我怎麼能實現這種行爲?

我已經嘗試過這種方法,但我從「備份通道」,指出它沒有任何用戶處理該消息得到一個錯誤:

enter image description here

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 

所以,問題是:我應該如何配置我的頻道所以消息一直存在,直到用戶再次被添加爲止?可能嗎?

+0

好吧,這在尷尬,但我想我只需要添加一個'隊列'元素的通道聲明,以便不使用'DirectChannel'實現(消息發送時確實需要一個消費者...) – Victor

回答

2

正確;只需將頻道設爲QueueChannel(添加一個<queue/>子元素)並向鏈中添加一個輪詢器。

+0

謝謝加里。一個問題:爲什麼我需要在鏈中添加一個輪詢器? – Victor

+0

由於隊列通道需要輪詢器來提取消息 - 或者您可以在頂層聲明默認輪詢器, –

+0

確定。這種隱含的使用不是非常直觀,但是,幸運的是,我已經有一個聲明爲入站適配器... :) – Victor

相關問題