【问题标题】:Message versioning in RabbitMQ / AMQP?RabbitMQ / AMQP 中的消息版本控制?
【发布时间】:2018-12-11 17:32:07
【问题描述】:

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

  1. 随着消息结构的变化,始终创建一个新的消息类
  2. 切勿将(纯)序列化对象用作消息。始终使用某种版本头字段和字节流正文字段。这样,接收者总是可以在尝试读取消息正文之前接受消息并检查版本号。
  3. 切勿将二进制序列化对象用作消息。相反,请使用 JSON 等文本形式。通过这种方式,接收方始终可以接受消息,检查版本号,然后(如果可能)了解消息正文。

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

但是,我对现实世界的经验和关于如何在消息结构发生变化时处理版本控制的建议感兴趣?

【问题讨论】:

  • 恕我直言,protobuf 是一个不错的选择。您的问题似乎最好通过搜索引擎回答......例如,这似乎很好地解决了 protobuf -beautifulcode.co/…
  • @Luke 与 2.中描述的版本标头结合使用。?

标签: rabbitmq message-queue


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 2018-07-24
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多