2012-02-16 66 views
0

我們使用Spring Integration 2.1將消息保存到客戶端發送的數據庫中。彈簧集成在數據庫不可用時阻止輪詢

有一個隊列將由自定義適配器填充。配置的服務激活器輪詢此隊列並將消息發佈到Spring管理的@Repository bean。所有的錯誤都會被捕獲到一個錯誤通道,並且會被服務處理。配置工作到目前爲止很好。

我的問題是,如果數據庫不可用,服務激活器將輪詢來自隊列的所有傳入消息並將它們放入錯誤通道。 如果數據庫明顯不可用,例如通過發送測試查詢,是否有辦法阻止服務激活器輪詢消息?

我configuraton:

<int:channel id="inChannel"> 
    <int:queue /> 
</int:channel> 
<bean id="service" class="some.service.Service" /> 
<int:service-activator ref="service" 
     method="write" input-channel="inChannel"> 
    <int:poller fixed-rate="100" task-executor="srvTaskExecutor" 
     receive-timeout="90" error-channel="errChannel" />   
</int:service-activator> 
<task:executor id="srvTaskExecutor" pool-size="2-10" 
     queue-capacity="0" rejection-policy="DISCARD" /> 
<int:channel id="errChannel" /> 
<int:service-activator input-channel="errChannel" 
     ref="errorService" method="write"/> 

問候。

回答

1

如果您給輪詢服務激活器一個「ID」,您可以引用該實例並根據DB是否可用調用start()或stop()。很可能你想在該服務激活器上設置auto-startup =「false」。此外,您甚至可以定義一個「控制總線」元素,然後像「myActivator.start()」和「myActivator.stop()」一樣向該控制總線的輸入通道發送消息。

希望幫助, 馬克

+0

我決定來定義控制總線和啓動/你提出的停止服務激活。感謝你及時的答覆。 – Ismail 2012-02-23 14:20:01