Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 12

А вы можете для не самых умных объяснить зачем? Зачем нужно использовать целую Кафку для синхронных взаимодействий если можно напрямую послать запрос в "микросервис-publisher"?

Это просто оверинжиниринг 80-го уровня получается.

Например, если ту же самую логику кто-то использует асинхронно (не писать же спец api для нового потребителя?), и/или Кафка используется как журнал запросов в системе

В пошаговых инструкциях как то не нашел, как реализован принцип то, на чем это основано. Это фича Кафки, или Спринга? Нельзя ли добавить пункт с теорией, что бы не разбирать весь текст?

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

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

Инстансы разные, но код обработки ответа-то один и тот же. Какая разница, какой из инстансов его поймал?

При асинхронной обработке - разницы нет. Но тут то смысл в том, что конкретный инстанс начинает "синхронно" ожидать ответ после запроса:

NotificationDispatchResponse dispatch(NotificationDispatchRequest notificationDispatchRequest) {
        String requestTopic = synchronousKafkaProperties.requestTopic();
        ProducerRecord<String, NotificationDispatchRequest> producerRecord = new ProducerRecord<>(requestTopic, notificationDispatchRequest);

        var requestReplyFuture = replyingKafkaTemplate.sendAndReceive(producerRecord);
        return requestReplyFuture.get().value();
    }

Точно. Тогда нужна идентификация "своих" сообщений 🤷‍♂️

Идентификация то там описана - с помощью correlationId в хедере. Вот только она никак не поможет, если ответ просто придет в другой инстанс.

На то она и идентификация - другой инстанс не должен принять чужое сообщение. Разруливание на уровне группы для инстанса например..смысл - обрабатываем только свое.

@spring_aio было бы круто, если бы вы отвечали на комментарии к своим статьям. Иначе выглядит как бездумный перевод ради накрутки подписчиков.

Главный плюс мог быть в том, чтобы использовать Кафку как надежного брокера с повторами изнутри при падении основного приложения и его рестарте. Например в сложных распределенных сценариях вызовов разных систем или работы с разными бд, когда из-за падения приложения разваливается вся логическая транзакция и нужно например повторять идемпотнентно (если возможно).

Но автор ничего не рассказал о теории и что будет с хэшмапой и сохранёнными в памяти коррелейшен ID при падении приложения или рестарте на половине выполненной логической транзакции.

Короче не хватает реальных примеров, когда этот подход реально дает профит и выручает. А когда наоборот вреден и всё сильно усложняет.

Особенно интересно всё это в купе с синхронным выполнением всей операции.

Что будет при таймауте свыше 30 секунд (Кафка упала или сеть)? Событие где-то останется? Ответ позже сформируется доработав по логике сценария даже если вызывающая сторона уже по таймауту отвалилась ведь сценарий был синхронным?

А под капотом там CompletableFuture? А если приложение запущено в нескольких экземплярах и запрос направил один экземпляр, а ответ принял другой?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий