0

我们使用 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"/>

问候。

4

1 回答 1

1

如果您给轮询服务激活器一个“id”,您可以引用该实例并根据数据库是否可用对其调用 start() 或 stop()。您很可能还想在该服务激活器上设置 auto-startup="false" 。

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

希望有帮助,马克

于 2012-02-16T16:14:58.943 回答