发布消息概览

如需使用 Pub/Sub 发布消息,发布者应用会创建消息,然后将其发送到主题。

本文档简要介绍了发布工作流,包括主题和消息的概念。

主题简介

Pub/Sub 主题 是代表消息信息流的命名资源。当发布者发送消息时,它会以特定主题为目标。Pub/Sub 服务使用此主题名称将消息路由到附加到该主题的所有订阅。如果某个订阅有多个订阅者,则该订阅中只有一个订阅者会收到消息。

发布者无需知道有多少订阅者。他们专注于主题,确保消息发送和消息接收之间的关注点分离。

Pub/Sub 支持两种主题:标准主题和导入主题。

主题的属性

创建或更新主题时,您可以指定主题属性。

如需详细了解主题属性,请参阅主题的属性

导入主题简介

借助导入主题,Pub/Sub 可以从其他来源注入流式数据,并充当将数据发送到主题的发布者应用。您可以使用控制台、Google Cloud CLI、REST 调用或客户端库在主题上启用注入。作为管理导入主题的一部分, Google Cloud 提供了对注入流水线的监控和伸缩。

如果没有导入主题,则需要使用附加服务才能将流式数据从数据源注入到 Pub/Sub 中。此附加服务会从原始来源拉取数据,并将其发布到 Pub/Sub。附加服务可以是流式引擎(例如 Apache Spark)或自定义编写的服务。您还必须配置、部署、运行、扩缩和监控此服务。

以下是有关导入主题的重要信息列表:

  • 与标准主题类似,您仍然可以手动发布到导入主题。

  • 您只能将单个注入来源附加到导入主题。

我们建议对流式数据使用导入主题。如果您考虑将 批量数据注入到 BigQuery 中,而不是注入流式 数据,可以尝试使用 BigQuery Data Transfer Service。 如果您想将数据注入到 Cloud Storage 中, Storage Transfer Service (STS) 是一个不错的选择。

Pub/Sub 支持以下导入主题来源:

主题中的数据复制

Pub/Sub 主题使用三个可用区来存储数据。该服务支持同步复制到至少两个可用区,并尽力复制到第三个可用区。Pub/Sub 复制仅在一个区域内进行。

消息简介

Pub/Sub 消息 是通过服务移动的数据。

消息由包含消息数据和元数据的字段组成。消息必须包含消息数据或至少一个属性。

  • 消息数据:这是消息的核心内容,可以是 任何文本或二进制数据。它表示您要在发布者和订阅者之间传递的实际信息。如果您直接使用 REST API, 则消息数据必须采用 base64 编码。 请参阅 发布消息 部分 REST 标签页中的示例。

  • 排序键:这是一个可选 标识符,表示必须对其消息进行排序的实体。 具有相同排序键的消息预计会按发布顺序传送给订阅者。只有在您希望按顺序传送消息时,才需要排序键。如需详细了解排序键,请参阅对消息排序

  • 属性:这些是可选的键值对,用于提供有关消息的其他 上下文和信息。它们可用于路由、过滤或丰富消息内容。例如,您可以添加时间戳或交易 ID 等属性。 如需详细了解发布消息时使用的属性,请参阅 使用属性发布消息

Pub/Sub 服务将以下字段添加到消息中:

  • 主题专属的消息 ID
  • Pub/Sub 服务接收消息的时间的时间戳

使用 Pub/Sub 客户端库发布消息时,请以字节数组(例如 Node.js Buffer)的形式提供消息 data。如果您的数据是字符串,则必须先将其编码为字节(例如使用 UTF-8 编码),然后再将其传递给客户端库。

如果您直接使用 REST API ,则消息数据必须采用 base64 编码并以字符串形式发送。

以下示例展示了 客户端发送的消息的 JSON 表示法

{
  "data": "VGhpcyBpcyB0aGUgY29yZSBtZXNzYWdlIGNvbnRlbnQu",
  "attributes": {
    "category": "notification",
    "user_id": "12345",
    "priority": "medium"
  },
  "orderingKey": "12345"
}

当订阅者收到消息时,该消息会包含 Pub/Sub 服务添加的 messageIdpublishTime 的值:

{
  "data": "VGhpcyBpcyB0aGUgY29yZSBtZXNzYWdlIGNvbnRlbnQu",
  "attributes": {
    "category": "notification",
    "user_id": "12345",
    "priority": "medium"
  },
  "messageId": "19443130675731448",
  "publishTime": "2026-05-04T23:15:19.863Z",
  "orderingKey": "12345"
  }
}

发布消息工作流

如需使用 Pub/Sub 发布消息,发布者应用会创建消息,然后将其发送到主题

  1. 创建一条包含您的数据的消息。
  2. 选择任何可选的发布属性。
  3. 向 Pub/Sub 服务器发送请求,以将消息发布到指定主题。
  4. Pub/Sub 服务会收到消息并按如下方式处理:

    • 消息会存储以供分发。

    • 消息会在多个可用区之间复制,以确保持久性和高可用性。

    • Pub/Sub 会识别订阅与消息主题匹配的订阅者,并将消息副本传送给每个订阅者。

Pub/Sub 会为现有订阅者提供至少一次消息传送及尽力排序功能。

如需详细了解 Pub/Sub 系统,请参阅 Pub/Sub 服务概览

如需详细了解 Pub/Sub 的工作原理, 请参阅 Pub/Sub 的架构概览

后续步骤

Apache Kafka® 是 Apache Software Foundation 或其关联公司在美国和/或其他国家/地区的注册商标。