Статьи

Шаблон шины управления с Spring Integration и JMS

Если вы спешите, см. Шаги и демонстрацию .

Вступление

Шаблон шины управления — это шаблон интеграции предприятия, который используется для управления распределенными системами в Spring Integration . В этом блоге я покажу вам, как управляющая шина может управлять вашим приложением или компонентом, чтобы запускать или останавливать прослушивание сообщения JMS . В этом примере мы используем очередь JMS для запуска и остановки адаптера входящего канала jms , мы также можем сделать это с помощью адаптера входящего канала jdbc и контролировать это через внешнее приложение. Другой способ сделать то же самое — использовать MBean, как в этом примере .

В этом случае используется поток интеграции Spring . Этим потоком Spring Integration можно управлять, отправив сообщение запуска / остановки на адаптер входящего канала из очереди ActiveMQ JMS .

Подробности Шина управления с пружинной интеграцией

Шина управления Spring Integration JMS

Шина управления Spring Integration JMS

Чтобы начать реализацию этого варианта использования, мы сначала напишем тест JUnit. Если вы заметите, как только inboundAdapter запущен, сообщение получено от adapterOutchannel. После остановки входящего адаптера сообщение не принимается. Это продемонстрировано как ниже,

@Test
public void demoControlBus() {
assertNull(adapterOutputChanel.receive(1000));
controlChannel.send(new GenericMessage<String>("@inboundAdapter.start()"));
assertNotNull(adapterOutputChanel.receive(1000));
controlChannel.send(new GenericMessage<String>("@inboundAdapter.stop()"));
assertNull(adapterOutputChanel.receive(1000));
}

Тестовая конфигурация выглядит как ниже,

<int:inbound-channel-adapter id="inboundAdapter"
channel="controlbus-managed-p2p-pollable-channel" expression="'Hello'"
auto-startup="false">
<int:poller fixed-rate="6000" />
</int:inbound-channel-adapter>

Если вы запустите «mvn test», тесты сработают. В основной конфигурации мы будем настраивать актуальные очереди и jms inbound-channel-adapter,  как показано ниже,

<int-jms:inbound-channel-adapter id="inboundAdapter"
channel="controlbus-managed-p2p-pollable-channel"
jms-template="jmsTemplate">
<int:poller fixed-rate="6000" />
</int-jms:inbound-channel-adapter>

<int-jms:inbound-channel-adapter id="controlBusAdapter"
channel="control-channel"
jms-template="controlBusJmsTemplate">
<int:poller fixed-rate="6000" />
</int-jms:inbound-channel-adapter>

Теперь, когда вы запускаете компонент как «Запуск на сервере» в STS IDE и
публикуете сообщение в MyQueue, вы можете видеть, что подписчики получали сообщения на консоли. Вы можете ввести «@ inboundAdapter.stop ()» в ControlBusQueue, он остановит адаптер входящего канала, он также выдаст исключение java.lang.InterruptedException, он выглядит как ложная тревога. Чтобы проверить, остановлен ли адаптер входящего канала, отправьте сообщение в MyQueue, компонент не будет обрабатывать сообщение. Теперь введите «@ inboundAdapter.start ()» в ControlBusQueue, он обработает предыдущее сообщение и начнет прослушивать новые сообщения.

Вывод

Если вы заметили в этом блоге, мы можем контролировать компонент для прослушивания сообщений с помощью шины управления. Другой способ сделать то же самое — использовать MBean, как в этом примере .