spring集成在数据库不可用时防止轮询

spring集成在数据库不可用时防止轮询,spring,jakarta-ee,spring-integration,Spring,Jakarta Ee,Spring Integration,我们使用SpringIntegration2.1将消息持久化到客户端发送的数据库中 有一个队列将由自定义适配器填充。配置的服务激活器轮询此队列并将消息释放到spring管理的@Repository bean。所有错误都将被捕获到错误通道,并由服务处理。到目前为止,配置工作正常 我担心的是,如果数据库不可用,服务激活器将轮询来自队列的所有传入消息,并将它们放入错误通道如果数据库明显不可用,是否有方法阻止service activator轮询消息,例如发送测试查询? 我的配置: <int:ch

我们使用SpringIntegration2.1将消息持久化到客户端发送的数据库中

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

我担心的是,如果数据库不可用,服务激活器将轮询来自队列的所有传入消息,并将它们放入错误通道如果数据库明显不可用,是否有方法阻止service activator轮询消息,例如发送测试查询?

我的配置:

<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"/>


注意。

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

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

希望有帮助,
Mark

我决定按照您的建议定义控制总线并启动/停止service activator。谢谢你的快速回答。