如需使用 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 (BQ DTS)。如果您想将数据注入到 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 发布消息,发布者应用需要创建消息并将消息发送到主题。
- 创建一条包含您的数据的消息。
- 选择任何可选的发布属性。
- 向 Pub/Sub 服务器发送请求以将消息发布到指定主题。
Pub/Sub 服务会接收消息并按如下方式进行处理:
系统会存储消息以进行分发。
系统会将消息复制到多个可用区,以实现持久性和高可用性。
Pub/Sub 会识别与消息主题匹配的订阅,并向每个订阅者传送消息的副本。
Pub/Sub 会为现有订阅者提供“至少一次”消息传送和尽力排序功能。
如需详细了解 Pub/Sub 系统,请参阅 Pub/Sub 服务概览。
如需详细了解 Pub/Sub 的运作方式,请参阅 Pub/Sub 的架构概览。