使用 Pub/Sub 和 IoT Core 进行消息传递
1. 消息传递模式
1.1 推送和拉取消息传递
Cloud Pub/Sub 支持两种消息传递方法:推送订阅和拉取订阅。传递方法是按订阅进行配置的,并且订阅可以随时在推送和拉取之间转换。推送和拉取订阅都提供至少一次传递,并将消息保留长达 7 天,但两者之间有几个关键区别。
1.2 拉取订阅
在拉取消息传递模型中,订阅者向 Cloud Pub/Sub API 发起请求,并在 API 响应中接收排队的消息。当队列为空时,API 会返回错误代码以表明没有可用消息。除了消息体、属性和消息 ID 外,每条消息还会返回一个确认(ack)ID。订阅者必须通过使用该消息的 ack ID 进行额外的 API 调用,通知 Cloud Pub/Sub 应从队列中删除该消息。
Google 为许多常用语言提供了 Cloud Pub/Sub 客户端库。这些客户端库抽象了通过 Cloud Pub/Sub API 摄取消息的大部分开销,应尽可能使用。大多数客户端库支持同步和异步拉取。同步拉取提供了最简单的拉取消息模型,使用单线程重复检查新消息。这为处理消息提供了非常可预测的负载,因为客户端可以配置在给定时间内处理的最大消息数。
对于支持并发工作流的语言,客户端库可以配置为异步拉取消息。这样做的优点是通过优先执行长寿命、非阻塞操作,为消息处理提供更高的总体吞吐量。此外,消息可以一次确认一条,而同步拉取更适合批量处理操作。
许多 Cloud Pub/Sub 客户端库还支持流式拉取操作,该操作利用双向 RPC 流。在这种模型中,客户端与 Cloud Pub/Sub 建立长期