Сохранение сообщений в Spring Integration Aggregator без MessageStore с помощью AMQP?
Я хотел бы знать, могу ли я сохранять постоянство в настройке Spring Integration, когда я использую агрегатор, который не поддерживается MessageStore, используя постоянство очередей AMQP (RabbitMQ) до и после агрегатора. Я предполагаю, что это будет использовать ack: агрегатор не будет подтверждать сообщение, пока не соберет все части и не отправит полученное сообщение. Кроме того, я хотел бы знать, если это когда-нибудь хорошая идея:)
Я новичок в работе с очередями и пытаюсь понять, какие шаблоны использовать.
Моя бизнес-логика для этого заключается в следующем:
- Я получаю сообщения в одну очередь.
- Каждое сообщение должно приводить к двум несвязанным вызовам веб-службы (предпочтительно параллельно).
- Результаты этих двух вызовов должны быть объединены с деталями из исходного сообщения.
- Затем комбинация должна быть отправлена как новое сообщение в очереди.
Сообщения важны, поэтому они не должны быть потеряны.
Я надеялся использовать только одну "постоянную" систему, а именно RabbitMQ, и не нуждался в добавлении базы данных.
Я пытался сохранить конкретность вопроса, но любые другие предложения о том, как подойти к этому, очень ценятся:)
1 ответ
То, что вы хотели бы сделать, напоминает мне шаблон Scatter-Gather EI.
Таким образом, вы получаете сообщение от AMQP отправить его в ScatterGather
конечная точка и дождаться агрегированного ответа. Этого достаточно, чтобы придерживаться подтверждения по умолчанию.
Верно, scatterChannel
может быть PublishSubscribeChannel
с исполнителем для вызова веб-служб параллельно. В любом случае процесс сбора данных будет ожидать ответов в соответствии со стратегией выпуска и заблокирует первоначальный прослушиватель AMQP, не получая сообщение преждевременно.