【问题标题】:spring integration prevent polling when database not available当数据库不可用时,弹簧集成防止轮询
【发布时间】:2012-02-16 15:03:24
【问题描述】:

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

问候。

【问题讨论】:

    标签: spring jakarta-ee spring-integration


    【解决方案1】:

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

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

    希望对您有所帮助, 标记

    【讨论】:

    • 我决定定义一个控制总线并按照您的建议启动/停止服务激活器。感谢您的快速回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多