2012-02-16 67 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