2013-09-09 1 views
1

Резервный сервер продолжает отправлять сообщения keepAlive на основной сервер. Основной сервер отвечает сообщением «Эй, я все еще бегу». Если ответ еще не наступил, сервер резервного копирования берет на себя и запускает новый адаптер, управляемый сообщениями.Ответ-ответный шаблон для сервера первичной резервной копии

  1. Как эффективно реализовать интеграцию весной?
  2. Как запустить адаптор, управляемый сообщением, из моего кода и НЕ автоматически с помощью Spring ApplicationContext.

UPDATE: Это мой текущий подход:

ОТПРАВИТЕЛЬ:

<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) как-то вызывать службу (?), Когда ответ НЕ пришел.

+0

хотя я не работал с интеграцией Spring, но могу дать общие шаги: попытайтесь выполнить вышеописанное требование самостоятельно, но идя через доступные источники весны онлайн и другие примеры. Вы можете беспокоиться об эффективности/производительности после того, как у вас есть что-то на месте. И один совет вы рассмотрели с помощью балансировщика нагрузки? – Sikorski

ответ

1

Комплект auto-startup - false; вы можете запустить/остановить адаптер, используя его методы Lifecycle; Вы можете сделать это непосредственно (путем введения его в качестве Lifecycle, или отправив сообщение на <control=bus/> (например @keepAliveMessageAdapter.start().

Вы можете сохранить состояние в какой-то боба (каждый раз, когда вы пинг), и настроить <inbound-channel-adapter/> для опроса метода на этом компоненте, который возвращает команду управляющей шины для запуска/остановки адаптера.