Шаблон проверки заявок на интеграцию Spring - повторная отправка при сбое

Итак, моя установка:

<int-amqp:inbound-channel-adapter channel="input-channel" queue-names="probni" message-converter="jsonMessageConverter"
                                  channel-transacted="true"
                                  transaction-manager="dataSourceTransactionManager"/>
<int:chain input-channel="input-channel" output-channel="oc2">
    <int:service-activator ref="h1" method="handle" />
    <int:service-activator ref="h2" method="handle" />
    <int:service-activator ref="h3" method="handle" />
    <int:splitter  />
    <int:claim-check-in message-store="messageStore" />
</int:chain>


<int:channel id="oc2">
    <int:dispatcher task-executor="taskExecutor" />
</int:channel>

<int:channel id="oc3" />

<int:claim-check-out message-store="messageStore" input-channel="oc2" output-channel="oc3" auto-startup="true" remove-message="true" />

<int-amqp:outbound-channel-adapter exchange-name="someexc" channel="oc3" amqp-template="rabbitTemplate" />

Я хочу иметь возможность хранить сообщение в messageStore в той же транзакции, что и int-amqp: inbound-channel-adapter, а затем иметь отдельный поток, который фактически отправит это сообщение другому обмену amqp. Кроме того, если первый поток сохраняет сообщение в messageStore, а затем завершает процесс, при повторном запуске выписка из заявки должна знать, что в этом случае ему необходимо загрузить неотправленное сообщение и отправить его на канал oc3.

Еще одна вещь - если у меня есть несколько сотрудников, регистрирующих заявки на получение и отправку заявок, совместно использующих одну и ту же таблицу БД, как они узнают, какое сообщение принадлежит тому или иному сотруднику, осуществляющему проверку заявок (особенно важно, когда у нас есть несколько сообщений от разных проверок заявок) -в начальном компоненте)?

Спасибо!

1 ответ

Решение

Прежде всего, давайте еще раз посмотрим на описание Claim-Check:

В приведенной выше конфигурации Сообщение, полученное на input-channel будет сохранен в хранилище сообщений, указанном message-store атрибут и индексируется с созданным идентификатором. Этот идентификатор является проверкой претензии для этого сообщения. Проверка претензий также станет полезной нагрузкой нового (преобразованного) сообщения, которое будет отправлено output-channel,

Итак, после преобразования в Claim-Check-In мы имеем id для сохраненного сообщения, и это используется Claim-Check-Out для восстановления сохраненного сообщения.

Ты можешь использовать QueueChannel вместо исполнителя с постоянным MessageStore для этой цели.

Это одна идея.

Другой как на самом деле опрос INT_MESSAGE стол через обычный <int-jdbc:inbound-channel-adapter> для MESSAGE_ID столбец и отправить результаты в <claim-check-out>,

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