Auf dieser Seite wird erläutert, wie Sie Nachrichten zu Lite-Themen veröffentlichen. Sie können Nachrichten mit der Pub/Sub Lite-Clientbibliothek für Java veröffentlichen.
Nach dem Veröffentlichen von Nachrichten und Erstellen eines Lite-Abos für ein Lite-Thema können Sie Nachrichten vom Lite-Abo empfangen.
Nachrichtenformat
Eine Nachricht besteht aus Feldern mit den Nachrichtendaten und Metadaten. Geben Sie in der Nachricht Folgendes an:
- Nachrichtendaten
- Ein Sortierschlüssel
- Einen Ereigniszeitpunkt
- Attribute mit zusätzlichen Metadaten
Die Clientbibliothek weist die Nachricht automatisch einer Partition zu. Der Pub/Sub Lite-Dienst fügt der Nachricht die folgenden Felder hinzu:
- Eine innerhalb der Partition eindeutige Nachrichten-ID
- Ein Zeitstempel für den Zeitpunkt, zu dem der Pub/Sub Lite-Dienst die Nachricht in der Partition speichert
Nachrichten veröffentlichen
Wenn Sie Nachrichten veröffentlichen möchten, fordern Sie eine Streamingverbindung an das Lite-Thema an und senden Sie dann Nachrichten über die Streamingverbindung.
Das folgende Beispiel zeigt, wie Sie Nachrichten in einem Lite-Thema veröffentlichen:
gcloud
Für diesen Befehl ist Python 3.6 oder höher erforderlich und das grpcio-Python-Paket muss installiert sein. Führen Sie für MacOS-, Linux- und Cloud Shell-Nutzer Folgendes aus:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Veröffentlichen Sie eine Nachricht mit dem Befehl gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA
Dabei gilt:
- TOPIC_ID: die ID des Lite-Themas
- LITE_LOCATION: der Standort des Lite-Themas
- MESSAGE_DATA: ein String mit den Nachrichtendaten
Go
Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in Pub/Sub Lite-Clientbibliotheken.
Java
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Python
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Die Clientbibliothek sendet asynchron Nachrichten und verarbeitet Fehler. Wenn ein Fehler auftritt, sendet die Clientbibliothek die Nachricht erneut.
- Der Pub/Sub Lite-Dienst schließt den Stream.
- Die Clientbibliothek puffert die Nachrichten und stellt eine Verbindung zum Lite-Thema wieder her.
- Die Clientbibliothek sendet die Nachrichten der Reihe nach.
Nachdem Sie eine Nachricht veröffentlicht haben, speichert der Pub/Sub Lite-Dienst die Nachricht in einer Partition und gibt die Nachrichten-ID an den Publisher zurück.
Sortierschlüssel verwenden
Wenn Nachrichten denselben Reihenfolgeschlüssel haben, weist die Clientbibliothek die Nachrichten derselben Partition zu. Der Sortierschlüssel darf maximal 1.024 Byte lang sein.
Der Sortierschlüssel befindet sich im Feld key
einer Nachricht.
Sie können Sortierschlüssel mit der Clientbibliothek festlegen.
gcloud
Für diesen Befehl ist Python 3.6 oder höher erforderlich und das grpcio-Python-Paket muss installiert sein. Führen Sie für MacOS-, Linux- und Cloud Shell-Nutzer Folgendes aus:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Veröffentlichen Sie eine Nachricht mit dem Befehl gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--ordering-key=ORDERING_KEY \
--message=MESSAGE_DATA
Dabei gilt:
- TOPIC_ID: die ID des Lite-Themas
- LITE_LOCATION: der Standort des Lite-Themas
- ORDERING_KEY: ein String, mit dem Nachrichten Partitionen zugewiesen werden
- MESSAGE_DATA: ein String mit den Nachrichtendaten
Go
Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in Pub/Sub Lite-Clientbibliotheken.
Java
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Python
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Mit Reihenfolgeschlüsseln können Sie mehrere Nachrichten an dieselbe Partition senden, sodass Abonnenten die Nachrichten in der Reihenfolge empfangen. Die Clientbibliothek kann einer gleichen Partition mehrere Reihenfolgeschlüssel zuweisen.
Ereigniszeit festlegen
Sie können die Ereigniszeit verwenden, um Ihre Lite-Mitteilungen zu veröffentlichen. „Ereigniszeit“ ist ein benutzerdefiniertes Attribut, das Sie Ihrer Nachricht hinzufügen können.
Sie können den Ereigniszeitstempel mit der Clientbibliothek oder der gCloud CLI festlegen.
Für diesen Befehl ist Python 3.6 oder höher erforderlich und das grpcio-Python-Paket muss installiert sein. Führen Sie für MacOS-, Linux- und Cloud Shell-Nutzer Folgendes aus:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Veröffentlichen Sie eine Nachricht mit dem Befehl gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--event-time=EVENT_TIME \
--message=MESSAGE_DATA
Dabei gilt:
TOPIC_ID: die ID des Lite-Themas
LITE_LOCATION: der Standort des Lite-Themas
EVENT_TIME: eine vom Nutzer angegebene Ereigniszeit. Weitere Informationen zu Zeitformaten erhalten Sie durch Eingabe von
gcloud topic datetimes
.MESSAGE_DATA: ein String mit den Nachrichtendaten
Attribute verwenden
Nachrichtenattribute sind Schlüssel/Wert-Paare mit Metadaten zur Nachricht. Die Attribute können Text- oder Byte-Strings sein.
Die Attribute befinden sich im Feld attributes
einer Nachricht. Mit der Clientbibliothek können Sie Attribute festlegen.
gcloud
Für diesen Befehl ist Python 3.6 oder höher erforderlich und das grpcio-Python-Paket muss installiert sein. Führen Sie für MacOS-, Linux- und Cloud Shell-Nutzer Folgendes aus:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Veröffentlichen Sie eine Nachricht mit dem Befehl gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA \
--attribute=KEY=VALUE,...
Dabei gilt:
- TOPIC_ID: die ID des Lite-Themas
- LITE_LOCATION: der Standort des Lite-Themas
- MESSAGE_DATA: ein String mit den Nachrichtendaten
- KEY ist der Schlüssel eines Nachrichtenattributs
- VALUE: der Wert für den Schlüssel des Nachrichtenattributs
Go
Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in Pub/Sub Lite-Clientbibliotheken.
Java
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Python
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Attribute können angeben, wie eine Nachricht verarbeitet werden soll. Abonnenten können das Feld attributes
einer Nachricht parsen und die Nachricht entsprechend ihren Attributen verarbeiten.
Nachrichten im Batch verarbeiten
Die Clientbibliothek veröffentlicht Nachrichten im Batch. Größere Batches benötigen weniger Rechenressourcen, erhöhen aber die Latenz. Sie können die Batchgröße mit den Batcheinstellungen ändern.
In der folgenden Tabelle sind die Batch-Einstellungen aufgeführt, die Sie konfigurieren können:
Einstellung | Beschreibung | Default |
---|---|---|
Größe der Anfrage | Die maximale Größe des Batches in Byte. | 3,5 MiB |
Zahl der Nachrichten | Die maximale Anzahl von Nachrichten in einem Batch. | 1.000 Nachrichten |
Verzögerung bei der Veröffentlichung | Die Zeit in Millisekunden zwischen dem Hinzufügen der Nachricht zu einem Batch und dem Senden des Batches an das Lite-Thema. | 50 Millisekunden |
Sie können Batch-Einstellungen mit der Clientbibliothek konfigurieren.
Go
Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in Pub/Sub Lite-Clientbibliotheken.
Java
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Python
Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.
Wenn eine Publisher-Anwendung gestartet wird, erstellt die Client-Bibliothek einen Batch für jede Partition in einem Lite-Thema. Wenn ein Lite-Thema beispielsweise zwei Partitionen hat, erstellen Publisher zwei Batches und senden jeden Batch an eine Partition.
Nachdem Sie eine Nachricht veröffentlicht haben, wird sie von der Clientbibliothek gepuffert, bis der Batch die maximale Anforderungsgröße, die maximale Anzahl von Nachrichten oder die Veröffentlichungsverzögerung überschreitet.
Nachrichten in eine Reihenfolge bringen
Lite-Themen sortieren Nachrichten in jeder Partition, indem Sie die Nachrichten veröffentlichen. Verwenden Sie einen Reihenfolgeschlüssel, um Nachrichten derselben Partition zuzuweisen.
Pub/Sub Lite liefert die Nachrichten aus einer Partition nacheinander und Abonnenten können die Nachrichten der Reihe nach verarbeiten. Weitere Informationen finden Sie unter Nachrichten empfangen.
Idempotenz der Veröffentlichung
Pub/Sub Lite-Clientbibliotheken unterstützen das idempotente Veröffentlichen ab den folgenden Versionen:
- java-pubsublite: Version 1.10.0.
- python-pubsublite: Version 1.8.0.
- google-cloud-go: pubsublite Version 1.7.0.
Wenn die Veröffentlichung einer Nachricht aufgrund von Netzwerk- oder Serverfehlern wiederholt wird, wird sie genau einmal gespeichert. Die Idempotency ist nur innerhalb derselben Sitzung gewährleistet. Sie kann nicht garantiert werden, wenn dieselbe Nachricht mit einem neuen Publisher-Client noch einmal veröffentlicht wird. Es fallen keine zusätzlichen Servicekosten an und die Veröffentlichungslatenz wird nicht erhöht.
Idempotentes Veröffentlichen aktivieren oder deaktivieren
Das idempotente Publizieren ist in den Pub/Sub Lite-Clientbibliotheken standardmäßig aktiviert. Sie kann mit den Publisher-Clienteinstellungen in der jeweiligen Clientbibliothek deaktiviert werden.
Wenn die idempotente Veröffentlichung aktiviert ist, kann der in einem Veröffentlichungsergebnis zurückgegebene Offset -1
sein. Dieser Wert wird zurückgegeben, wenn die Nachricht als Duplikat einer bereits erfolgreich veröffentlichten Nachricht erkannt wird, der Server aber nicht genügend Informationen hat, um den Offset der Nachricht zum Zeitpunkt der Veröffentlichung zurückzugeben.
Nachrichten, die von Abonnenten empfangen werden, haben immer einen gültigen Offset.
Fehlerbehebung
Erhaltene Duplikate
Da die Idempotenz auf eine einzelne Sitzung beschränkt ist, werden möglicherweise Duplikate empfangen, wenn Sie den Publisher-Client neu erstellen, um dieselben Nachrichten zu veröffentlichen.
Ein Abonnentenclient kann dieselbe Nachricht mehrmals erhalten, wenn Abonnenten vom Pub/Sub Lite-Dienst automatisch Partitionen zugewiesen werden (Standardeinstellung). Eine Nachricht wird möglicherweise an einen anderen Abonnentenclient weitergeleitet, wenn eine Neuzuweisung erfolgt.
Fehler des Publishers
Der Status einer Publisher-Sitzung wird nach 7 Tagen Inaktivität auf dem Server automatisch beseitigt. Wenn eine Sitzung nach diesem Zeitraum fortgesetzt wird, wird der Publisher-Client mit einer Fehlermeldung wie „Vorbedingung fehlgeschlagen: Die Nachricht sollte die Veröffentlichungssequenznummer … haben“ beendet und akzeptiert keine neuen Nachrichten. Erstelle den Publisher-Client neu, um diesen Fehler zu beheben.