Pubsub 消息传递中的信封模式是什么?

What is an envelope pattern in Pubsub messaging?

我正在寻找一些资源来理解信封模式,但 google 并没有太大帮助。有人可以举例说明吗?有关更多信息,我正在 Python 中与 Pubsub 合作,我希望为复杂的应用程序标记带有一些附加信息的消息(除了在消息正文中简单地添加该信息之外)。

PubSub 信封模式很简单

  • 消息内容(绝对是你想要的,base64编码)
  • 消息的属性(您可以添加以添加内容的元数据)。您可以使用属性在不处理消息的情况下对消息做出决定。 例如,添加消息版本。如果您的代码只能处理 v1 而您有 v2 消息,请跳过它而不是出现解组错误。
  • 发布 ID
  • 时间戳

当您使用信封时,它会以两种不同的方式呈现:

您会发现相同的信息,但结构与 JSON 架构完全相同。

信封模式是一种用元数据包装消息的方法,可以帮助确定如何处理该消息,而无需了解消息本身的内容。元数据可用于确定如何将消息路由到适当的接收方以处理消息内容,或者它可以指示如何处理消息本身。

通常,这种模式的工作方式是不同的层在传递给它的消息之上添加一个包装器。可以有多个嵌套的信封。当收到一条消息时,有一个相应的层会为每层添加一个信封删除一个信封。

创建消息的一方将如下所示:

消费消息的一方看起来像这样:

A Google Cloud Pub/Sub message 有一个 attributes 地图可以用于此目的。您可以将数据放入可以指示如何处理消息的属性中,而无需解码存储在消息的 data 部分中的字节。

例如,假设您有一个主题,其中包含与电子商务网站上的不同用户操作相对应的消息。一些消息用于配置文件更新,而另一些消息用于交易。您希望对这些类型的消息执行不同的操作。您可以在 attributes 中添加 key/value 对,而不是查看消息中的 data 字段来确定它是哪种类型以及如何处理它,例如action: UPDATEaction: TRANSACTION。然后,您的订阅者会查看 action 属性的值并确定如何处理消息。它可以执行不同的代码片段,甚至可以将其发送到不同的服务,充当消息的路由器。关键是无需对消息数据本身进行解码即可确定要执行的操作。

Messages sent to push subscription endpoints have an additional envelope added that indicates the subscription 消息来自。这是必要的,因为多个推送订阅可能指向相同的端点。