如需使用 Pub/Sub 发布消息,发布者应用需要创建消息并将其发送到主题。
本文档简要介绍了发布工作流,包括主题和消息的概念。
主题简介
Pub/Sub 主题是代表消息信息流的命名资源。发布者发送消息时,会指定目标主题。Pub/Sub 服务使用此主题名称将消息路由到附加到该主题的所有订阅。如果某个订阅有多个订阅者,则只有该订阅中的一个订阅者会收到消息。
发布者不必知道有多少订阅者。它们侧重于主题,确保消息发送和消息接收之间的关注点分离。
Pub/Sub 支持两种主题:标准主题和导入主题。
主题的属性
创建或更新主题时,您可以指定主题属性。
如需详细了解主题属性,请参阅主题的属性。
导入主题简介
借助导入主题,Pub/Sub 可以从其他来源注入流式数据,并充当将数据发送到主题的发布者应用。您可以使用控制台、Google Cloud CLI、REST 调用或客户端库在主题上启用提取。作为管理导入主题的一部分,Trusted Cloud by S3NS 提供提取流水线的监控和伸缩功能。
如果没有导入主题,则需要使用其他服务才能将数据从数据源流式传输到 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 服务接收消息的时间的时间戳
例如,以下是 JSON 格式的消息:
{
"data": "This is the core message content.",
"attributes": {
"category": "notification",
"user_id": "12345",
"priority": "medium"
},
"orderingKey": "12345"
}
使用 Pub/Sub 客户端库发布消息时,请以字节数组(例如 Node.js Buffer
)的形式提供消息 data
。如果您的数据是字符串,您必须先将其编码为字节(例如使用 UTF-8 编码),然后再将其传递给客户端库。
如果您直接使用 REST API,则消息数据必须采用 base64 编码并以字符串形式发送。
发布消息工作流
如需使用 Pub/Sub 发布消息,发布者应用会创建消息,然后将其发送到主题。
- 创建一条包含您的数据的消息。
- 选择任何可选的发布属性。
- 向 Pub/Sub 服务器发送请求,以将消息发布到指定主题。
Pub/Sub 服务接收消息并按如下方式处理:
消息已存储以供分发。
消息会跨多个可用区进行复制,以实现持久性和高可用性。
Pub/Sub 会识别出订阅与消息主题匹配的订阅者,并将消息副本传送给每个订阅者。
Pub/Sub 会为现有订阅者提供“至少一次”消息传送及尽力排序功能。
如需详细了解 Pub/Sub 系统,请参阅 Pub/Sub 服务概览。
如需详细了解 Pub/Sub 的工作原理,请参阅 Pub/Sub 的架构概览。