Как бороться с сбоями приложений с RabbitMQ - PullRequest
0 голосов
/ 28 апреля 2018

Недавно я реализовал RabbitMQ для пары вариантов использования. Отправка писем является одним из них (что довольно часто встречается на практике)

Моя формулировка проблемы :

Веб-сервис (скажем, сервис A) должен опубликовать 1000 сообщений в очереди (которые будут выбраны каким-либо механизмом отправки почты). Но, к сожалению, после публикации 500 сообщений в очереди мое приложение вылетает.

Теперь, если я снова нажму на тот же сервис, то 500 сообщений, которые уже были отправлены при первом запуске, будут снова отправлены. Хотя дублирование почты пока не имеет большого значения, но это определенно нежелательно. Как бороться с этим. Есть мысли?

Решения, которые я придумал :

  1. Использование пакетной функции - но она не поддерживается AsyncRabbitTemplate, поэтому я не могу использовать это.

  2. Использование базы данных. Но это определенно громоздко. Я не буду использовать это также.

1 Ответ

0 голосов
/ 28 апреля 2018

Если вы можете идентифицировать дубликаты, вы можете использовать Idempotent Receiver шаблон корпоративной интеграции на стороне потребителя.

Spring Integration имеет реализацию .

Однако неясно, почему вы используете асинхронный шаблон, поскольку он предназначен для операций отправки и получения. Это приложение звучит так, как будто ему нужно только отправлять запросы, а не ждать ответа.

Также неясно, как пакетная обработка может помочь, так как сбой может произойти на стороне потребителя после того, как он обработал половину пакета.

В любом случае вам нужно отследить, куда вы попали до аварии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...