0

РАЗЪЯСНЕНИЯ: Обратите внимание на то, что этот вопрос будет отличаться от этого один: How to implement a microservice Event Driven architecture with Spring Cloud Stream Kafka and Database per serviceКак запросить хранилище событий в microservice Sourcing событий архитектуры с весной Облако поток Кафкой

Это один об использовании Kafka as the only repository (of events), не DB не требуется, Другой - об использовании Database (MariaDB) per service + Kafka.

Я хотел бы реализовать Sourcing архитектуру событий для обработки распределенных транзакций:

OrdersService <------------> | Kafka Event Store | <------------>PaymentsService 
       subscribe/       subscribe/ 
        find         find 

OrdersService получает запрос и сохраняет заказ новый заказ в брокере.

private OrderBusiness orderBusiness;  

@PostMapping 
public Order createOrder(@RequestBody Order order){ 
    logger.debug("createOrder()"); 
    //do whatever 
    //Publish the new Order with state = pending 
    order.setState(PENDING); 
    try{  
     orderSource.output().send(MessageBuilder.withPayload(order).build()); 
    }catch(Exception e){ 
     logger.error("{}", e); 
    } 
    return order; 
} 

Это мое главное сомнение: как я могу запросить брокера Kafka? Представьте, что я хочу искать заказы пользователем/датой, состоянием и т. Д.

+0

Возможный дубликат [Как реализовать microservice Event Driven архитектуру с Spring Cloud поток Кафки и базы данных в service] (http://stackoverflow.com/questions/42140285/how-to-implement-a-microservice-event-driven-architecture-with-spring-cloud-stre) – spencergibb

+0

Привет Спенсер, я не думаю, что это дублировать. Другой - использование базы данных (MariaDB) за услугу + Kafka. Это касается использования Kafka в качестве единственного репозитория (событий), нет необходимости в БД: http://microservices.io/patterns/data/database-per-service.html vs http://microservices.io/patterns/data /event-sourcing.html – codependent

ответ

0

Краткий ответ: Вы не можете запросить брокера, но вы можете использовать API-интерфейс Kafka's Streams и «Интерактивные запросы».

Длинный ответ: Шаблон доступа для чтения тем Кафки, это линейное сканирование и не случайный поиск. Конечно, вы также можете переместить в любое время через #seek(), но только на офсет или раз. Кроме того, темы разбиваются на разделы, а данные (по умолчанию) хэш разбивается на ключ (модель данных - пары ключ-значение). Итак, есть понятие ключа.

Тем не менее, вы можете использовать Kafka's Streams API, который позволяет вам создавать приложение, в котором хранятся текущие состояния, на темы Kafka, являющиеся основной истиной, - как материализованное представление (в основном кеш). "Interactive Queries" позволяет запрашивать материализованное представление.

Для получения более подробной информации см это два блога:

+0

Чтобы добавить к пункту Маттиаса выше, у нас будет прямая поддержка KStream в следующих версиях Spring Kafka и Spring Cloud Stream. –

+0

Отлично! Спасибо вам за информацию! – codependent

Смежные вопросы