Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Я участвую в проекте, в котором очень интенсивно используется брокер сообщений RabbitMQ. Под "очень интенсивно" я подразумеваю, что это единственный канал взаимодействия десятков сервисов - никаких вам HTTP и REST. И в этой статье мы рассмотрим понятие "Poison Message" и как с ним можно жить.
Оказалось, что постановка проблемы тянет на отдельную статью, поэтому для нетерпеливых сразу даю ссылку на сам алгоритм.
Постановка проблемы
Когда в нашу систему залетают данные (сообщения), мы никогда не можем быть уверены, что же именно залетело, пока не выполним какие-нибудь действия наподобие валидации. Даже если мы всё покрыли тестами, контрактами и валидациями, всегда может появиться админ или дежурный, которые случайно отправит что-то не то или не туда.
Если мы говорим о брокере сообщений (и не важно, это Apache Kafka
или RabbitMQ
), то проблема заключается в том, что если сервис-получатель не может обработать сообщение (