Шаблон проверки заявок на интеграцию 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>
,