2

备份服务器不断向主服务器发送 keepAlive 消息。主服务器回复消息“嘿,我还在运行。”。如果没有回复,则备份服务器接管并启动一个新的消息驱动适配器。

  1. 如何在 Spring Integration 中有效地实现这一点?
  2. 如何从我的代码启动消息驱动适配器,而不是由 Spring ApplicationContext 自动启动。

更新:这是我目前的方法:

发件人:

<si:inbound-channel-adapter id="keepAlivePoller" channel="keepAliveChannel" method="sendMessage" > 
    <bean class="com.keepAlive.KeepAliveSender"/>
    <si:poller fixed-rate="${keepalive.sendinterval}" max-messages-per-poll="1"></si:poller>
</si:inbound-channel-adapter>    

这是我的接收器:

<si:channel id="pollKeepChannel">
    <si:queue/>
</si:channel>

<int-jms:message-driven-channel-adapter id="keepAliveMessageAdapter" 
    channel="pollKeepChannel" destination="keepAlive" connection-factory="connectionFactory"  
    max-concurrent-consumers="2" auto-startup="true" acknowledge="transacted" extract-payload="true"/>

<si:service-activator id="keepAliveServiceActivator" input-channel="pollKeepChannel" ref="keepAliveService" method="process">
     <int:poller  />
</si:service-activator> 
<bean id="keepAliveService" class="com.keepAlive.KeepAliveService"/>

<bean id="keepAlive" 
    class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="PREM_KEEPALIVE" />
</bean> 

我想 1) 以某种方式接收来自发送服务器的回复。2)当回复没有到来时,以某种方式调用服务(?)。

4

1 回答 1

1

设置auto-startup为假;您可以使用其方法启动/停止适配器Lifecycle;您可以直接执行此操作(通过将其作为 a 注入Lifecycle,或通过向 a 发送消息<control=bus/>(例如@keepAliveMessageAdapter.start().

您可以在某个 bean 中保持状态(每次获得 ping 时),并配置一个<inbound-channel-adapter/>轮询该 bean 上的方法,该方法返回控制总线命令以启动/停止适配器。

于 2013-09-10T20:11:43.847 回答