Гранулярность темы в архитектуре, управляемой событиями - PullRequest
0 голосов
/ 04 марта 2019

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

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

  1. Одна тема на каждуюиз классических операций CRUD в каждой из моделей (исключая чтение, так как состояние пользователя не меняется).Мы бы получили user-created, user-updated, user-deleted.Этот подход достаточно универсален, но потенциально может быть много сервисов, подписанных на тему user-updated и отбрасывающих все те события, которые не изменяют конкретное поле.

  2. Одна тема для каждой релевантной для бизнесаменять.В дополнение к user-created и user-deleted у нас могут быть такие события, как user-email-updated, user-signed-in (которые в противном случае были бы вызваны событием user-updated, в котором была изменена дата последнего входа) и т. Д.Я чувствую, что, хотя это было бы удобно для тех подписчиков, которые заинтересованы только в очень специфических изменениях, для тех служб, которым необходимо синхронизировать все, что происходит с пользователем, будет сложнее, поскольку им придется подписываться на все большее число пользователей.разделы для отслеживания всех изменений в пользовательской модели.

  3. Смесь между 1 и 3, где оба события user-updated и user-email-updated будут отправлены, когда пользователь обновитесли пользователь изменит профиль, будет отправлено электронное письмо с адресом user-updated.

1 Ответ

0 голосов
/ 06 марта 2019

Способ состоит в том, чтобы реализовать второй вариант, но реализовать его с иерархией тем, чтобы подписчики могли выбирать степень детализации своего интереса (например, при подписке на пользователей. * Или * .updated или user.actions.login и т. Д.).)

Некоторые технологии (например, RabbitMQ) имеют эту встроенную возможность, для других вы можете реализовать реестр тем и предоставить инфраструктуру для управления подписками самостоятельно

...