Версионирование сообщений в RabbitMQ / AMQP? - PullRequest
0 голосов
/ 03 июля 2018

Каков рекомендуемый способ управления версиями сообщений? Основными направлениями мысли являются:

  1. Всегда создавайте новый класс сообщений при изменении структуры сообщения
  2. Никогда не используйте (чистые) сериализованные объекты в качестве сообщения. Всегда используйте какое-либо поле заголовка версии и поле тела потока байтов. Таким образом, получатель всегда может принять сообщение и проверить номер версии, прежде чем пытаться прочитать тело сообщения.
  3. Никогда не используйте двоичные сериализованные объекты в качестве сообщения. Вместо этого используйте текстовую форму, такую ​​как JSON. Таким образом, получатель всегда может принять сообщение, проверить номер версии и затем (когда это возможно) понять текст сообщения.

Поскольку я хочу сохранить свои сообщения компактными, я подумываю использовать Буферы протокола Google , которые позволили бы мне удовлетворить как 2, так и 3.

Однако меня интересует реальный опыт и советы о том, как управлять версиями сообщений при изменении их структуры?

1 Ответ

0 голосов
/ 10 июля 2018

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

Можно подумать, что информация о версии и типе полезной нагрузки содержится в одном заголовке.

...