弹出集成在数据库不可用时阻止轮询

时间:2012-02-16 15:03:25

标签: spring java-ee spring-integration

我们使用Spring Integration 2.1将消息持久保存到客户端发送的数据库中。

有一个队列将由自定义适配器填充。配置的服务激活器轮询此队列并将消息释放到spring托管的@Repository bean。所有错误都将被捕获到错误通道,并由服务处理。到目前为止配置工作正常。

我担心的是,如果数据库不可用,服务激活器会轮询来自队列的所有传入消息并将它们放入错误通道。 如果数据库显然不可用,有没有办法阻止服务激活器轮询邮件,例如通过发送测试查询?

我的配置:

<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 个答案:

答案 0 :(得分:1)

如果您给polling service-activator一个“id”,您可以引用该实例并根据可用或不可用的DB调用start()或stop()。很可能你也想在该服务激活器上设置auto-startup =“false”。

此外,您甚至可以定义“control-bus”元素,然后将“myActivator.start()”和“myActivator.stop()”等消息发送到该控制总线的输入通道。

希望有所帮助, 标记