2016-08-09 2 views
0

На вопрос, у меня есть 2 микросервиса.микросервисы и ограниченные контексты

  • Управление идентификацией
  • Учет

Я знаю, что каждый microservice не должно быть тесно связаны, и она должна иметь свою собственную базу данных.

Предположим, что учетная запись имеет счета-фактуры, и каждый счет-фактура имеет выдающего агента. Агент от бухгалтерского учета также существует как пользователь в микросервисе Identity.

Если я правильно понял, данные управления идентификацией (пользователями) должны быть скопированы в учет (агенты) и должны копировать только те данные, которые необходимы для этого ограниченного контекста (имя и фамилия), поэтому счет может иметь правильный issuingAgentId.

Правильно ли это, чтобы данные согласовывались и делились между контекстами? Каждый раз, когда пользователь создается в микросервисе идентификации, событие «UserCreated» будет опубликовано, а учет или любая другая услуга, заинтересованная в этом событии, должна слушать и обрабатывать его, добавляя соответствующий агент? То же самое касается обновления информации о пользователе.

ответ

0

Это один из способов справиться с этим да и обычно предпочтительный метод. Вы храните кеш локально в своей службе, который хранит копии данных из другой службы. В управляемой событиями системе это предполагает прослушивание интересующих событий и их использование для обновления локального кеша. Кэш может быть в памяти или сохранен. Примером для вашего случая использования было бы при создании счета-фактуры, контекст учета будет выглядеть в локальном кэше для пользователя/агента перед созданием счета-фактуры.

Другие варианты:

общая база данных

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

RPC

Вы можете сделать вызов RPC на другую службу, когда вам нужна информация. В вашем примере контекст Accounting вызовет контекст управления идентификацией для информации AgentId/User перед тем, как выставить счет-фактуру. Компромисс с этим подходом снова связан с другой услугой. Что вы делаете, когда оно недоступно? Вы не можете выставлять счет-фактуру.

Отчетный домен

Другим вариантом является совершенно отдельный сервис, который прослушивает данные из других служб и поддерживает просмотр моделей UIs. Это позволит другим вашим службам не знать о проблемах других служб. При использовании управляемой событиями системы вы будете слушать события из других служб, которые позволят вам создать модель представления для пользовательского интерфейса. Обычно это хороший вариант, если все, что вы делаете, это просмотр данных

+1

Почему в памяти?Когда вы говорите службу пользовательского интерфейса, в моем примере это означает, что учетная служба будет иметь только AgentId, но не будет ли ответственность за обслуживание пользовательского интерфейса для создания имени и фамилии из идентификатора агента? – Robert

+0

Не обязательно находиться в памяти, при необходимости может сохраняться. Имея отдельную услугу только для просмотров пользовательского интерфейса, вы передаете ей всю ответственность за агрегирование данных, необходимых для любых просмотров. Только один вариант, хотя :) – tomliversidge

+0

Это очень хорошая идея. Я просто обеспокоен тем, как узнать информацию о счете-фактуре, является ли AgentId действительным, если он не имеет этих данных в своем контексте и использует службу пользовательского интерфейса для агрегирования. – Robert

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