Статьи

Шаблон претензий с помощью vFabric RabbitMQ и Gemfire

 Если вы спешите, обратитесь к инструкции по запуску этого образца .

В продолжение моего предыдущего блога о шаблоне претензий в этом блоге я использую канал сообщений с поддержкой AMQP для упрощения реализации шаблона претензий . Существует также еще один хороший блог о Spring Integration — хранилище полезных данных с помощью Claim-check , в котором рассказывается о шаблоне Claimcheck.

Шаблон Enterprise Integration Pattern выглядит следующим образом:

Шаблон проверки претензий с помощью vFabric RabbitMQ и Gemfire

Шаблон проверки претензий с помощью vFabric RabbitMQ и Gemfire

Вариант использования в этом блоге: сообщение отправляется в очередь, сообщение проверяется в хранилище сообщений vFabric Gemfire, а GUID извлекается и отправляется в Exchange vFabric RabbitMQ . Абоненты, слушающие этот Exchange , получат GUID, извлекут из хранилища сообщений и вызовут активатор службы.

В соответствии с разработкой Test First тестовый пример JUnit выглядит следующим образом:

@Test
public void testIntegration() {
String request = streamToString(getClass().getResourceAsStream(
"/data/payload.xml"));
Message<String> message = MessageBuilder.withPayload(request)
.build();
channel.send(message);
String outMessage = outChannel.receive(1000).getPayload().toString();
assertEquals(outMessage, request);
}

В тестовом коде, поскольку нет преобразования, мы просто сравниваем входные данные с данными, выходящими из целевого канала.

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

<int:channel id="p2p-pollable-channel" />
<int:publish-subscribe-channel id="pub-sub-channel" />
<int:channel id="checkout-channel3" >
<int:queue />
</int:channel>
<int:claim-check-out message-store="simpleMessageStore"
input-channel="pub-sub-channel" output-channel="checkout-channel3"
remove-message="false" />

В основной конфигурации конфигурация vFabric RabbitMQ выглядит следующим образом:

<!-- A reference to the org.springframework.amqp.rabbit.connection.ConnectionFactory -->
<rabbit:connection-factory id="connectionFactory" />
<!-- Creates a org.springframework.amqp.rabbit.core.RabbitAdmin to manage
exchanges, queues and bindings -->
<rabbit:admin connection-factory="connectionFactory" />
<int-amqp:channel id="p2p-pollable-channel" connection-factory="connectionFactory" />
<int-amqp:publish-subscribe-channel id="pub-sub-channel" connection-factory="connectionFactory" />

Наконец, процесс интеграции демонстрирует проверку претензий и проверку претензий, как показано ниже,

<int:claim-check-in message-store="simpleMessageStore"
input-channel="p2p-pollable-channel" output-channel="pub-sub-channel" />

<int:claim-check-out message-store="simpleMessageStore"
input-channel="pub-sub-channel" output-channel="checkout-channel1"
remove-message="false" />

<int:claim-check-out message-store="simpleMessageStore"
input-channel="pub-sub-channel" output-channel="checkout-channel2"
remove-message="false" />

Если вы внимательно заметите, «p2p-pollable-channel» и «pub-sub-channel» — это физические очереди и обмены в vFabric RabbitMQ в соответствии с последним блогом по интеграции с Amqp Backed Spring с использованием vFabric Rabbitmq