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ültig. Diese Nachrichten entsprechen dem Typ und der Codierung, die in den Schemaeinstellungen des Themas angegeben sind.
Der Abonnent kann die mit einem Thema verknüpften Schemaeinstellungen anhand der folgenden Attribute bestimmen:
googclient_schemaname
: Den Namen des Schemas, das für die Validierung verwendet wird. Wenn das Schema gelöscht wurde, lautet der Name_deleted-schema_
.googclient_schemaencoding
: Die Codierung der Nachricht, entweder JSON oder BINARY.googclient_schemarevisionid
: Die Revision-ID des Schemas, das zum Parsen und Validieren der Nachricht verwendet wird. Jede Version hat eine eindeutige Versions-ID. Die Versions-ID ist eine automatisch generierte achtstellige UUID. Wenn die Überarbeitung 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 Referenzdokumentation zur Pub/Sub C++ API.
Avro ProtoC#
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C# API.
Avro ProtoGo
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.
Avro ProtoJava
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.
Avro Protocol BufferNode.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Avro Protocol BufferNode.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Avro Protocol BufferPHP
Folgen Sie der Einrichtungsanleitung für PHP unter Schnellstart: Clientbibliotheken verwenden, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub PHP API.
Avro Protocol BufferPython
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.
Avro Protocol BufferRuby
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Ruby in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Ruby API.
Avro Protocol BufferThemen abonnieren, die mit einem Avro-Schema mit Versionen verknüpft sind
Bei Avro müssen Nachrichten mit dem Schema geparst werden, mit dem sie codiert sind. Sie können Nachrichten auch mithilfe der Avro-Schemaauflösung in ein anderes Schema umwandeln.
Pub/Sub sorgt dafür, dass alle Schemaversionen vorwärts- und rückwärtskompatibel mit allen anderen Versionen sind. Dank dieser Kompatibilität kann jede Version als Leser- oder Schreibschema verwendet werden.
Wenn Sie eine Nachricht parsen, die mit einer anderen Schemaversion codiert ist als die, die Ihr Abonnent verwendet, müssen Sie möglicherweise das ursprüngliche Schema abrufen und als Writer-Schema übergeben.
Am besten wird das Avro-Leseobjekt im Cache gespeichert, das Nachrichten für jede Schemaversion analysieren kann, um die Latenz und die Anzahl der Aufrufe der GetSchema
API zu minimieren.
Der folgende Code zeigt diese Funktionen:
Lesen Sie die im vorherigen Abschnitt beschriebenen Attribute, um zu ermitteln, welche Schemaversion zum Codieren der Nachricht verwendet wird.
Rufen Sie die Schemaversion ab und speichern Sie einen damit generierten Reader im Cache.
Parse die Nachricht im Schema, das dein Abonnent verwendet.
Go
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Go API.
Java
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Java API.
Python
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Python API.
Erforderliche Rollen
Führen Sie einen der folgenden Schritte aus, um die Berechtigungen zu erhalten, die Sie zum Validieren einer Nachricht anhand eines Schemas benötigen:
- Weisen Sie einem Dienstkonto eine der folgenden vordefinierten Rollen zu:
roles/pubsub.admin
,roles/pubsub.editor
oderroles/pubsub.viewer
. Erstellen Sie eine benutzerdefinierte Rolle für ein Dienstkonto und fügen Sie die folgenden Berechtigungen
pubsub.schemas.validate
undpubsub.schemas.get
hinzu.Weitere Informationen zu benutzerdefinierten Rollen finden Sie unter Benutzerdefinierte IAM-Rollen erstellen und verwalten.