スキーマを使用してトピックからメッセージを解析する

トピックでは、スキーマを使用して、メッセージが準拠すべき形式を定義できます。 スキーマを使用してトピックに登録するとき、サブスクライバーに送信されるメッセージが有効なメッセージとなることが保証されます。これらのメッセージは、トピックに関連付けられたスキーマ設定で指定された型とエンコードに準拠しています。

サブスクライバーは、次の属性を調べることで、トピックに関連付けられたスキーマ設定を特定できます。

  • googclient_schemaname: 検証に使用されるスキーマの名前。 スキーマが削除されると、名前は _deleted-schema_ になります。

  • googclient_schemaencoding: メッセージのエンコード(JSON またはバイナリ)。

  • googclient_schemarevisionid: メッセージの解析と検証に使用されるスキーマのリビジョン ID。各リビジョンには、一意のリビジョン ID が関連付けられています。リビジョン ID は、自動生成された 8 文字の UUID です。リビジョンが削除されると、ID は _deleted-schema-revision_ になります。

スキーマの詳細については、スキーマの概要をご覧ください。

スキーマに関連付けられているトピックをサブスクライブするためのコードサンプル

以下のサンプルは、スキーマを使用して構成したトピックをサブスクライブする際にメッセージを処理する方法を示しています。

C++

このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API リファレンス ドキュメントをご覧ください。

Avro
namespace pubsub = ::google::cloud::pubsub;
using ::google::cloud::future;
using ::google::cloud::StatusOr;
return [](pubsub::Subscriber subscriber) {
  auto session = subscriber.Subscribe(
      [](pubsub::Message const& m, pubsub::AckHandler h) {
        std::cout << "Message contents: " << m.data() << "\n";
        std::move(h).ack();
      });
  return session;
}
Proto
namespace pubsub = ::google::cloud::pubsub;
using ::google::cloud::future;
using ::google::cloud::StatusOr;
return [](pubsub::Subscriber subscriber) {
  auto session = subscriber.Subscribe(
      [](pubsub::Message const& m, pubsub::AckHandler h) {
        google::cloud::pubsub::samples::State state;
        (void)state.ParseFromString(std::string{m.data()});
        std::cout << "Message contents: " << state.DebugString() << "\n";
        std::move(h).ack();
      });
  return session;
}

C#

このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API リファレンス ドキュメントをご覧ください。

Avro

using Avro.IO;
using Avro.Specific;
using Google.Api.Gax;
using Google.Cloud.PubSub.V1;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

public class PullAvroMessagesAsyncSample
{
    public async Task<int> PullAvroMessagesAsync(string projectId, string subscriptionId, bool acknowledge)
    {
        SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
        int messageCount