Можно задачу описать поподробнее?
Есть последовательность событий, нужно их брать из очереди в строгом порядке, обогащать данными из разных внешних сервисах и передать в другую очередь?
При этом никакая параллельность обработки недопустима, пока не обработано событие, брать следующие нельзя?
Спасибо, что проявили интерес. Задача такая. В микросервисной архитектуре происходят пользовательские события, н-р логин, регистрация, изменение данных. Эти события нужно доставлять в систему аналитики. Микросервисы ничего не знают про эту систему, они отправляют данные о событиях в кафку. Соответственно события независимые, т.е. понятно, что обычно происходит регистрация, а уже потом изменение данных н-р, но сейчас последовательность не важна. Чтобы система аналитики могла работать с эвентом, его нужно обогатить пользовательской информацией, которую достают через http API-call.
Текущая реализация такая что, есть один большой сервис, который:
- забирает событие из кафки [Обработка других событий блокируется, т.к. нужно в кафку закоммитить что эвент прочитан, это происходит только когда успешно завершится его обработка]
- лезет в redis-кэш за пользовательскими данными [Если данных не хватает, делается API-call, и результат складывается в redis. Вопрос устаревания кэша решается тем, что если пользовательские данные изменились, должен быть обработан кафка-эвент, откуда берутся новые значения и обновляется кэш. Если API-call падает, то происходит его перезапуск. Пока неясно, сколько раз автор планирует его перезапускать. Но в качестве примера подобного успешного решения он приводит другой свой проект с функцией retryForever, где delay между ретраями начинается с 15 сек и в максимуме достигает 2 мин]
- насыщает событие,
- отправляет в аналитику.