Создание идемпотента службы с помощью Spring Kafka - PullRequest
0 голосов
/ 17 июня 2020

У меня есть служба 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 недели?

Заранее спасибо!

Йохен

...