編寫及回應 Pub/Sub 訊息

Cloud Pub/Sub 在應用程式之間提供可靠且多對多的非同步訊息傳遞功能。發佈者應用程式能將訊息傳送到「主題」,其他應用程式訂閱該主題後就能收到訊息。

本文件說明如何使用 Google Cloud 用戶端程式庫,透過彈性環境中執行的應用程式傳送及接收 Cloud Pub/Sub 訊息。

必備條件

  • 請按照 App Engine 上適用於 .NET 的「Hello, World!」中的操作說明設定環境和專案,並瞭解如何在 App Engine 中建構 .NET 應用程式。
  • 請記下並保存您的專案 ID,因為您將需要利用該 ID 來執行本文所述的範例應用程式。
* 如要從 Google Cloud Platform 主控台下載憑證來建立服務帳戶,並將服務帳戶金鑰新增到應用程式中,請按照在 GitHub 中概述的步驟 3 來進行。 * 啟用Google Cloud Pub/Sub API。

啟用 API

複製範例應用程式

將範例應用程式複製到您的本機電腦,然後前往 pubsub 目錄:

git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
cd dotnet-docs-samples/appengine/flexible/pubsub

建立主題和訂閱

請建立主題和訂閱,其中包括指定 Pub/Sub 伺服器傳送要求的目標端點:

gcloud pubsub topics create YOUR_TOPIC
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION `
    --topic YOUR_TOPIC `
    --push-endpoint `
    https://YOUR_PROJECT_ID.appspot.com/pubsub/push?token=YOUR_SECRET_TOKEN `
    --ack-deadline 10

設定環境變數

請編輯 appsettings.json 檔案來設定專案 ID:

{
  "Pubsub": {
    "ProjectId": "your-project-id",
    "VerificationToken": "your-secret-token",
    "TopicId": "your-topic",
    "SubscriptionId": "your-subscription"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

程式碼審查

範例應用程式使用 Google Cloud 用戶端程式庫

[HttpGet]
[HttpPost]
public IActionResult Index(MessageForm messageForm)
{
    var model = new MessageList();
    if (!_options.HasGoodProjectId())
    {
        model.MissingProjectId = true;
        return View(model);
    }
    if (!string.IsNullOrEmpty(messageForm.Message))
    {
        // Publish the message.
        var pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.PublishAsync(pubsubMessage);
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

在本機執行範例

在本機執行應用程式範例時,您可以透過 Cloud SDK 提供驗證,以便使用 Google Cloud API。如果您是根據必備條件一節中的指示設定環境,您應該已執行可提供這項驗證的 gcloud init 指令。

如何在本機執行範例應用程式:

Visual Studio

  1. 利用 Visual Studio 開啟 dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln

  2. 在「方案總管」中,用滑鼠右鍵按一下 [Pubsub],然後選擇 [Debug] > [Start new instance]

指令列

  1. dotnet-docs-samples\appengine\flexible\Pubsub 目錄執行以下指令:

    dotnet restore
    dotnet run
    
  2. 在網路瀏覽器中,輸入下列網址:

    http://localhost:5000/
    

模擬推播通知

應用程式可在本機傳送訊息,但是無法在本機接收推送訊息。然而,您可以向本機推播通知端點提出 HTTP 要求,藉此模擬推送訊息。範例包含 sample_message.json 檔案。

如要發出 HTTP POST 要求:

Get-Content -Raw .\sample_message.json | Invoke-WebRequest -Uri
http://localhost:5000/Push?token=your-secret-token -Method POST -ContentType
'text/json' -OutFile out.txt

要求成功完成之後,您可以重新整理 localhost:5000,並在已接收訊息的清單中查看訊息。

在 App Engine 上執行

如要使用 gcloud 指令列工具將示範應用程式部署到 App Engine 上,請於 app.yaml 檔案所在的目錄執行下列指令:

Visual Studio

如要部署 Hello World 應用程式:

  1. 用 Visual Studio 開啟 dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln
  2. 在「方案總管」中,以滑鼠右鍵按一下 [Pubsub],然後選擇 [Publish to Google Cloud...]。
  3. 按一下 [App Engine Flex]
  4. 按一下 [Publish]

指令列

dotnet-docs-samples\appengine\flexible\Pubsub 目錄執行以下指令:
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

您現在可以在 https://[YOUR_PROJECT_ID].appspot.com 存取應用程式,並可以使用表單提交訊息,但是系統無法保證應用程式的哪個執行個體會收到通知。另外,您也可以傳送多則訊息、重新整理頁面來查看收到的訊息。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
.NET 文件適用的 App Engine 彈性環境