Имеется ситуация / требование, когда двум микросервисам необходимо совместно использовать данные обоих баз данных (Dynamo db).
- Микросервису карт необходимо знать основную информацию о клиентах c (только с именами и адресом).
- Микросервису клиентов необходимо перечислить карты (с номером основной карты. / type), принадлежащий / указанный на карте.
Попытка сохранить каждый микросервис с его собственной долей данных. Данные поступают в формате - идентификатор клиента и идентификатор карты.
Ограничение использования kafka без потоков kafka / sql и без использования CQRS, подход следующий:
- Сохраните указанную выше информацию в базе данных карт (Dynamodb) с информацией о карте и идентификатором клиента.
- Данные потоков Dynamo db -> Lambda -> Получить предыдущий идентификатор карты, информацию о карте, идентификатор клиента. Отправить событие кафки. (Событие: CARD_CUSTOMER_ASS_CREATED, Topi c: Card)
- Потребитель Kafka -> Микросервис клиента. Обновите / создайте указанную выше информацию карты с информацией о клиенте.
- Создать событие kafka -> с информацией о клиенте, идентификатором карты (Событие: CUSTOMER_CARD_ASS_UPDATED, Topi c: Клиент)
- Потребитель Kafka - > Карточный микросервис. Обновите информацию о клиенте на основе события.
- Если возникнут какие-либо сбои, отправьте соответствующие события CARD_CUSTOMER_ASS_DELETED / CUSTOMER_CARD_ASS_DELETED для отката или удаления ассоциации.
Вопросы
- Теперь, я упускаю / усложняю сценарий?
- Как вы называете / выбираете topi c для событий кафки, связанных с обоими объектами? Можно ли назвать CUSTOMER_CARD_ASS_UPDATED CARD_CUSTOMER_ASS_UPDATED? Мы выбираем Card topi c для первоначального инициирования события, поскольку пользовательский интерфейс протекает таким образом.
- Должны ли мы создавать новый topi c CardCustomers?
- Наконец, нужно ли нам генерировать какое-то событие например CARD_CUSTOMER_ASS_COMPLETED, CUSTOMER_CARD_ASS_COMPLETED для обозначения завершения вышеуказанных задач?