Nachrichten aus einem Thema mit einem Schema parsen

Themen können Schemas verwenden, um ein Format zu definieren, dem ihre Nachrichten folgen müssen. Wenn Sie ein Thema mit einem Schema abonnieren, sind die an den Abonnenten gesendeten Nachrichten garantiert gültige Nachrichten. Diese Nachrichten entsprechen dem Typ und der Codierung, die in den Schemaeinstellungen angegeben sind, die mit dem Thema verknüpft sind.

Der Abonnent kann die mit einem Thema verknüpften Schemaeinstellungen bestimmen, indem er sich die folgenden Attribute ansieht:

  • googclient_schemaname: Der Name des Schemas, das für die Validierung verwendet wird. Wenn das Schema gelöscht wird, lautet der Name _deleted-schema_.

  • googclient_schemaencoding: Die Codierung der Nachricht, entweder JSON oder BINARY.

  • googclient_schemarevisionid: Die Revisions-ID des Schemas, das zum Parsen und Validieren der Nachricht verwendet wird. Jeder Revision ist eine eindeutige Revisions-ID zugeordnet. Die Revisions-ID ist eine automatisch generierte achtstellige UUID. Wenn die Revision gelöscht wird, lautet die ID _deleted-schema-revision_.

Weitere Informationen zu Schemas finden Sie unter Schemaübersicht.

Codebeispiele zum Abonnieren von Themen, die mit einem Schema verknüpft sind

Diese Beispiele zeigen, wie Sie Nachrichten verarbeiten, wenn Nachrichten abonniert werden, die mit Schemas konfigurierte Themen enthalten .

C++

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Pub/Sub C++ API-Referenzdokumentation.

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;
        state.ParseFromString(std::string{m.data()});
        std::cout << "Message contents: " << state.DebugString() << "\n";
        std::move(