Сохранение сообщений в Spring Integration Aggregator без MessageStore с помощью AMQP?

Я хотел бы знать, могу ли я сохранять постоянство в настройке Spring Integration, когда я использую агрегатор, который не поддерживается MessageStore, используя постоянство очередей AMQP (RabbitMQ) до и после агрегатора. Я предполагаю, что это будет использовать ack: агрегатор не будет подтверждать сообщение, пока не соберет все части и не отправит полученное сообщение. Кроме того, я хотел бы знать, если это когда-нибудь хорошая идея:)

Я новичок в работе с очередями и пытаюсь понять, какие шаблоны использовать.

Моя бизнес-логика для этого заключается в следующем:

  • Я получаю сообщения в одну очередь.
  • Каждое сообщение должно приводить к двум несвязанным вызовам веб-службы (предпочтительно параллельно).
  • Результаты этих двух вызовов должны быть объединены с деталями из исходного сообщения.
  • Затем комбинация должна быть отправлена ​​как новое сообщение в очереди.

Сообщения важны, поэтому они не должны быть потеряны.

Я надеялся использовать только одну "постоянную" систему, а именно RabbitMQ, и не нуждался в добавлении базы данных.

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

1 ответ

Решение

То, что вы хотели бы сделать, напоминает мне шаблон Scatter-Gather EI.

Таким образом, вы получаете сообщение от AMQP отправить его в ScatterGather конечная точка и дождаться агрегированного ответа. Этого достаточно, чтобы придерживаться подтверждения по умолчанию.

Верно, scatterChannel может быть PublishSubscribeChannel с исполнителем для вызова веб-служб параллельно. В любом случае процесс сбора данных будет ожидать ответов в соответствии со стратегией выпуска и заблокирует первоначальный прослушиватель AMQP, не получая сообщение преждевременно.

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