У меня есть служба service A
, которая получает сообщение от топи Kafka c. На основании этого сообщения моя служба связывается с другой службой service B
, в которой в фоновом режиме работает какая-то система кредитов. Это означает, что каждый вызов, который мы делаем это service B
, использует определенное количество кредитов (зависит от содержания сообщения). В зависимости от результата service B
, service A
отправляет новое сообщение и другое сообщение Kafka c.
Возможно, мы получаем сообщение несколько раз на service A
, но мы хотим только свяжитесь с service B
для первого сообщения - иначе мы будем использовать слишком много кредитов от service B
, а также хотим отправить наше сообщение только один раз. Это означает, что мы хотим дедуплицировать события и сделать нашу систему идемпотентной.
Я искал «стандартное» решение этой проблемы в сочетании с Spring Kafka. На данный момент мой лучший успех - использование Apache Camel. Маршрут настроен для чтения сообщений, а IdempotentRepository
выполняет дедупликацию.
Есть ли другие возможные решения моей проблемы? service A
не содержит состояния, поэтому я не могу проверить, например, по базе данных, обработал я сообщение уже или нет. Я ищу лучшие практики. Мне также интересно, как долго я хочу хранить информацию в моем IdempotentRepository
. Я мог бы хранить его, например, неделю, но что, если я получу дубликат сообщения через 2 недели?
Заранее спасибо!
Йохен