Использование JDBCMessageStore в Агрегаторе

Я пытаюсь понять поведение Агрегатора при использовании JDBCMessageStore. Ниже приведен мой пример использования:

1) Считать сообщение (детали заказа) из очереди.

<?xml version="1.0" encoding="UTF-8"?>
<order xmlns="http://www.example.org/orders">
  <orderItem>
    <isbn>12333454443</isbn>
    <quantity>4</quantity>
  </orderItem>
  <orderItem>
    <isbn>545656777</isbn>
    <quantity>50</quantity>
  </orderItem>
  ..
  ..
</order>

Одно сообщение заказа будет содержать несколько элементов OrderItem.

2) Разделить сообщение заказа на основе количества элементов заказа

3) Объединить в 4 сообщения orderItem; messageCountReleaseStrategy используется с threshold = 4

4) Пересылать агрегированное сообщение активатору услуги.

Я наблюдал за данными в 3 таблицах: INT_MESSAGE_GROUP, INT_MESSAGE и INT_GROUP_TO_MESSAGE и похоже, что данные изначально вставляются в эти 3 таблицы, и когда группа освобождается, дата удаляется / удаляется из этих таблиц.

Я хотел проверить ошибки вставки БД в одну из таблиц (INT_GROUP_TO_MESSAGE). Чтобы смоделировать ошибку, я опустил таблицу INT_GROUP_TO_MESSAGE.

Нижеследующий тест был выполнен:

1) Размещено 1 заказное сообщение с 3 заказанными элементами

2) Получено сообщение об ошибке - таблица не существует - (ожидается, что INT_GROUP_TO_MESSAGE не существует)

3) я мог найти записи в 2 таблицах

а) INT_MESSAGE_GROUP было 1 запись.

б) INT_MESSAGE было 23 записи. Похоже, что сообщение было повторено несколько раз, было сделано несколько записей.

4) Создал таблицу INT_GROUP_TO_MESSAGE

5) Размещено 1 заказное сообщение с 1 заказным товаром

6) Исходное сообщение (шаг 1) вместе с новым (шаг 5) было взято из очереди и обработано.

7) Агрегатор выпустил группу из 4 сообщений.

8) Однако в таблице базы данных - INT_MESSAGE все еще существует 23 записи, тогда как другие таблицы пусты.

Я смоделировал ошибку Db при отбрасывании таблицы, но в работе мы можем столкнуться с проблемами памяти, табличного пространства, которые могут привести к сбою этих вставок.

Мой вопрос: можем ли мы установить какой-либо параметр, чтобы у нас была транзакция в 3 таблицах: INT_MESSAGE_GROUP, INT_MESSAGE и INT_GROUP_TO_MESSAGE?

Ниже моя конфигурация

<int-jms:message-driven-channel-adapter id="jmsIn"
                                      channel="mqInbound"
                                      destination="requestQueue" 
                                      message-converter="orderMessageConverter"/>


<int:splitter input-channel="mqInbound"  output-channel="item" expression="payload.orderItem"/>


<int:aggregator input-channel="item"                 output-channel="itemList"
              ref="orderAggregator"                  method="sendList"
              correlation-strategy="orderAggregator" correlation-strategy-method="groupOrders"
              expire-groups-upon-completion="true"   release-strategy="messageCountReleaseStrategy" 
              message-store="messageStore"           discard-channel="aggregatorDiscardChannel" />


<int-jdbc:message-store id="messageStore" data-source="jdbcDatasource"  table-prefix="MY_INT_"/>

  <bean id="messageCountReleaseStrategy"     class="org.springframework.integration.aggregator.MessageCountReleaseStrategy">
    <constructor-arg index="0" value="4"/>
  </bean>

0 ответов

Другие вопросы по тегам