RabbitMQ/AMQP中的消息版本控制? [英] Message versioning in RabbitMQ / AMQP?

查看:18
本文介绍了RabbitMQ/AMQP中的消息版本控制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

处理消息版本控制的推荐方法是什么?主要的思想流派似乎是:

  1. 始终在邮件结构更改时创建新的邮件类
  2. 永远不要将(纯)序列化对象用作消息。始终使用某种版本头字段和字节流主体字段。这样,接收方始终可以在尝试读取邮件正文之前接受邮件并检查版本号。
  3. 切勿将二进制序列化对象用作消息。相反,可以使用文本形式,如JSON。这样,接收方始终可以接受消息,检查版本号,然后(如果可能)理解消息正文。

由于我希望使我的消息紧凑,我正在考虑使用Google Protocol Buffers,这将允许我同时满足2和3。

然而,我对真实世界的经验和如何在消息结构更改时处理消息的版本控制的建议感兴趣?

推荐答案

在这种情况下,"版本"基本上是关于消息的一些元数据,这些元数据是对处理算法的一些指令/提示。因此,我建议在报头中添加这样的元数据(在有效负载之外),以便消费者可以在尝试读取/理解和处理消息有效负载之前先读取元数据。例如,如果您将版本信息保留在有效负载中,并且由于某种原因(消息有效负载已损坏),则算法将无法解析消息,则它无法以事件方式访问您放在那里的元数据。

您可以考虑在一个标头中同时包含负载的版本和类型信息。

这篇关于RabbitMQ/AMQP中的消息版本控制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆