使用 Pub/Sub

Pub/Sub 是一种全托管式实时消息传递服务,可让您在独立的应用之间发送和接收消息。本页面介绍如何使用 Cloud Tools for PowerShell 管理 Pub/Sub。并通过一个简单示例,说明如何创建主题、向主题发布消息、创建对主题的订阅以及将消息从主题拉取到订阅。

如需详细了解 Pub/Sub cmdlet,请参阅 Cloud Tools for PowerShell cmdlet 参考文档。如需从整体上详细了解 Pub/Sub,请参阅 Pub/Sub 概览

创建主题

发布者应用创建主题并将消息发送到主题。您可以调用 New‑GcpsTopic cmdlet 以在特定主题中创建实例。如果您的活动 gcloud 配置包含项目,则无需使用 -Project 参数。

# Creates topic "my-topic" in the default project.
New-GcpsTopic -Topic "my-topic"

向主题发布消息

要向主题发布消息,您可以使用 Publish‑GcpsMessage cmdlet。

# Publishes the message with data "This is a test" to topic "my-topic".
Publish-GcpsMessage -Data "This is a test" -Topic "my-topic"

要使用单个请求向同一主题发布多条消息,可以使用 New‑GcpsMessage cmdlet 创建一系列消息并传递给 Publish‑GcpsMessage cmdlet。

# Creates two messages.
$messageOne = New-GcpsMessage -Data "This is a test"
$messageTwo = New-GcpsMessage -Data "Data" -Attributes @{"key" = "value"}

# Publish the messages to topic "my-topic".
Publish-GcpsMessage -Message @($messageOne, $messageTwo) -Topic "my-topic"

创建对主题的订阅

订阅者应用创建对主题的订阅以便从其接收消息。您可以调用 New‑GcpsSubscription cmdlet 以在特定主题中创建实例。如果您的活动 gcloud 配置包含项目,则无需使用 -Project 参数。

默认情况下,创建的订阅是一个拉取订阅,这意味着订阅者将从主题中拉取消息。您可以使用 -PushEndpoint 创建推送订阅(Pub/Sub 会将消息推送到订阅者选择的端点)。

# Creates pull subscription "pull-subscription" to topic "my-topic" in the default project.
New-GcpsSubscription -Topic "my-topic" -Subscription "pull-subscription"

# Creates push subscription "push-subscription" to topic "my-topic".
New-GcpsSubscription -Topic "my-topic" `
                     -Subscription "push-subscription" `
                     -PushEndpoint "http://www.example.com"

为订阅拉取消息

要为订阅拉取消息,您可以使用 Get‑GcpsMessage cmdlet。默认情况下,cmdlet 将保持阻止直至检索到至少一条消息。 要避免阻止,请使用参数 -ReturnImmediately。如果使用了参数 -AutoAck,cmdlet 还会自动为每条检索到的消息发送确认。否则,必须使用 Send‑GcpsAck cmdlet 发送确认。在消息的确认截止期限到期后,未确认的消息可再次用于拉取。

# Pulls messages from subscription "my-subscription" and sends out acknowledgement automatically.
Get-GcpsMessage -Subscription "my-subscription" -AutoAck

# Pulls messages from subscription "my-subscription" and sends out acknowledgement with Send-GcpsAck.
$messages = Get-GcpsMessage -Subscription "my-subscription"
Send-GcpsAck -InputObject $messages