На данный момент код инициируемого события - это жестко закодированная константная строка, объявленная внутри микросервиса, запускающего событие. Моя проблема в том, что каждый микросервис, который хочет подписаться на это событие, должен дублировать эту строку кода события. Это подвержено ошибкам, особенно когда код события переименован, потому что все микросервисы, которые подписались на этот код события, должны быть изменены соответствующим образом ... что очень плохо.
События сообщения . Все ограничения, которые мы используем для управления развитием сообщений, применимы и к событиям.
В архитектуре микросервисов мы ожидаем, что сможем развертывать экземпляры сервисов независимо друг от друга. Требование, чтобы все службы закрылись вместе, чтобы координировать изменения в схеме сообщений, упускает из виду смысл. Это, в свою очередь, подразумевает, что нам необходимо разработать разумное поведение для случаев, когда производитель и потребитель не имеют одинакового понимания сообщения.
На практике это означает что-то вроде
- Мы никогда не вводим новое обязательное поле, только дополнительные поля (с задокументированными значениями по умолчанию).
- Нераспознанные поля игнорируются (но пересылаются)
- Потребители необязательных полей знают, как использовать значение по умолчанию, используемое при отсутствии ожидаемого поля.
- Когда эти ограничения не могут быть выполнены, вы вводите новое сообщение.
Если у вас есть контракты с сообщениями, то вы не ограничиваете себя реализациями микросервисов, которые используют одну и ту же платформу времени выполнения (поскольку две разные реализации одного и того же контракта эквивалентны).
Рекомендуем прочитать: