Pub/Sub メッセージの作成と応答

Google Cloud Pub/Sub は、アプリケーション間で信頼できる多対多の非同期メッセージングを行います。パブリッシャー アプリケーションはメッセージを「トピック」に送信し、その他のアプリケーションはそのトピックにサブスクライブしてメッセージを受信できます。

このドキュメントでは、Google Cloud クライアント ライブラリを使用して、フレキシブル環境で動作するアプリで Google Cloud Pub/Sub メッセージを送受信する方法について説明します。

要件

  • App Engine の .NET 用「Hello, World!」の手順に沿って環境とプロジェクトを設定し、App Engine の .NET アプリの構造について理解します。
  • このドキュメントで説明しているサンプル アプリケーションを実行するために必要なので、プロジェクト ID をメモして保存します。
  • Google Cloud Platform Console から認証情報をダウンロードしてサービス アカウントを作成し、アプリケーションにサービス アカウントキーを追加するには、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 beta pubsub topics create YOUR_TOPIC
gcloud beta 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 を編集する

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 Client ライブラリを使用しています。

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

サンプルをローカルで実行する

ローカルで実行する場合、Google Cloud API を使用するための認証を行うには、Google Cloud SDK を利用できます。要件に記載されているとおりに環境をセットアップしていれば、この認証を行うための 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/
    

プッシュ通知をシミュレートする

アプリケーションは、ローカルでメッセージを送信できますが、push メッセージを受信することはできません。push メッセージをシミュレートするには、ローカル プッシュ通知エンドポイントに 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\netcoreapp1.0\publish
gcloud beta app deploy

これで、https://[YOUR_PROJECT_ID].appspot.com のアプリケーションにアクセスできます。フォームを使用してメッセージを送信できますが、通知を受信するアプリケーションのインスタンスが常に同じとは限りません。複数のメッセージを送信してページを更新すると、受信メッセージを確認できます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

.NET の App Engine フレキシブル環境に関するドキュメント