Questa pagina spiega come pubblicare messaggi negli argomenti Lite. Puoi pubblicare messaggi con la libreria client Pub/Sub Lite per Java.
Dopo aver pubblicato i messaggi e creato una sottoscrizione Lite a un argomento Lite, puoi ricevere messaggi dalla sottoscrizione Lite.
Formato messaggio
Un messaggio è costituito da campi con i dati e i metadati del messaggio. Specifica una delle seguenti opzioni nel messaggio:
- I dati del messaggio
- Una chiave di ordinamento
- Un'ora evento
- Attributi con metadati aggiuntivi
La libreria client assegna automaticamente il messaggio a una partizione e il servizio Pub/Sub Lite aggiunge i seguenti campi al messaggio:
- Un ID messaggio univoco all'interno della partizione
- Un timestamp del momento in cui il servizio Pub/Sub Lite archivia il messaggio nella partizione
Pubblicazione di messaggi
Per pubblicare i messaggi, richiedi una connessione in streaming all'argomento Lite e poi invia i messaggi tramite la connessione in streaming.
L'esempio seguente mostra come pubblicare messaggi in un argomento Lite:
gcloud
Questo comando richiede Python 3.6 o versioni successive e l'installazione del pacchetto Python grpcio. Per gli utenti di MacOS, Linux e Cloud Shell, esegui:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Per pubblicare un messaggio, utilizza il comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA
Sostituisci quanto segue:
- TOPIC_ID: l'ID dell'argomento Lite
- LITE_LOCATION: la posizione dell'argomento Lite
- MESSAGE_DATA: una stringa con i dati del messaggio
Vai
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Go in Librerie client Pub/Sub Lite.
Java
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Java riportate in Librerie client Pub/Sub Lite.
Python
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client Pub/Sub Lite.
La libreria client invia messaggi in modo asincrono e gestisce gli errori. Se si verifica un errore, la libreria client invia di nuovo il messaggio.
- Il servizio Pub/Sub Lite chiude lo stream.
- La libreria client mette in buffer i messaggi e ristabilisce una connessione all'argomento Lite.
- La libreria client invia i messaggi in ordine.
Dopo aver pubblicato un messaggio, il servizio Pub/Sub Lite lo archivia in una partizione e restituisce l'ID messaggio al publisher.
Utilizzo delle chiavi di ordinamento
Se i messaggi hanno la stessa chiave di ordinamento, la libreria client li assegna alla stessa partizione. La chiave di ordinamento deve essere una stringa di massimo 1024 byte.
La chiave di ordinamento si trova nel
campo key
di un messaggio.
Puoi impostare le chiavi di ordinamento con la libreria client.
gcloud
Questo comando richiede Python 3.6 o versioni successive e l'installazione del pacchetto Python grpcio. Per gli utenti di MacOS, Linux e Cloud Shell, esegui:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Per pubblicare un messaggio, utilizza il comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--ordering-key=ORDERING_KEY \
--message=MESSAGE_DATA
Sostituisci quanto segue:
- TOPIC_ID: l'ID dell'argomento Lite
- LITE_LOCATION: la posizione dell'argomento Lite
- ORDERING_KEY: una stringa utilizzata per assegnare i messaggi alle partizioni
- MESSAGE_DATA: una stringa con i dati del messaggio
Vai
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Go in Librerie client Pub/Sub Lite.
Java
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Java riportate in Librerie client Pub/Sub Lite.
Python
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client Pub/Sub Lite.
Puoi inviare più messaggi alla stessa partizione utilizzando le chiavi di ordinamento, in modo che i sottoscrittori ricevano i messaggi in ordine. La libreria del client potrebbe assegnare più chiavi di ordinamento alla stessa partizione.
Impostare l'ora dell'evento
Puoi utilizzare l'ora dell'evento per pubblicare i messaggi Lite. La data e l'ora dell'evento è un attributo personalizzato che puoi aggiungere al messaggio.
Puoi impostare il timestamp dell'evento con la libreria client o l'interfaccia a riga di comando gcloud.
Questo comando richiede Python 3.6 o versioni successive e l'installazione del pacchetto Python grpcio. Per gli utenti di MacOS, Linux e Cloud Shell, esegui:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Per pubblicare un messaggio, utilizza il comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--event-time=EVENT_TIME \
--message=MESSAGE_DATA
Sostituisci quanto segue:
TOPIC_ID: l'ID dell'argomento Lite
LITE_LOCATION: la posizione dell'argomento Lite
EVENT_TIME: un'ora dell'evento specificata dall'utente. Per ulteriori informazioni sui formati di tempo, esegui
gcloud topic datetimes
.MESSAGE_DATA: una stringa con i dati del messaggio
Utilizzare gli attributi
Gli attributi dei messaggi sono coppie chiave-valore con metadati relativi al messaggio. Gli attributi possono essere stringhe di testo o di byte.
Gli attributi si trovano nel
campo attributes
di un messaggio. Puoi impostare gli attributi con la libreria client.
gcloud
Questo comando richiede Python 3.6 o versioni successive e l'installazione del pacchetto Python grpcio. Per gli utenti di MacOS, Linux e Cloud Shell, esegui:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Per pubblicare un messaggio, utilizza il comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA \
--attribute=KEY=VALUE,...
Sostituisci quanto segue:
- TOPIC_ID: l'ID dell'argomento Lite
- LITE_LOCATION: la posizione dell'argomento Lite
- MESSAGE_DATA: una stringa con i dati del messaggio
- KEY: la chiave di un attributo messaggio
- VALUE: il valore della chiave dell'attributo messaggio
Vai
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Go in Librerie client Pub/Sub Lite.
Java
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Java riportate in Librerie client Pub/Sub Lite.
Python
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client Pub/Sub Lite.
Gli attributi possono indicare come elaborare un messaggio. Gli abbonati possono analizzare il campo attributes
di un messaggio ed elaborarlo in base ai relativi attributi.
Messaggi batch
La libreria client pubblica i messaggi in batch. I batch di dimensioni maggiori utilizzano meno risorse di calcolo, ma aumentano la latenza. Puoi modificare la dimensione del batch con le impostazioni di raggruppamento.
La tabella seguente elenca le impostazioni di raggruppamento che puoi configurare:
Impostazione | Descrizione | Predefinito |
---|---|---|
Dimensioni richiesta | La dimensione massima, in byte, del batch. | 3,5 MiB |
Numero di messaggi | Il numero massimo di messaggi in un batch. | 1000 messaggi |
Ritardo nella pubblicazione | Il tempo, in millisecondi, che intercorre tra l'aggiunta del messaggio a un batch e l'invio del batch all'argomento Lite. | 50 millisecondi |
Puoi configurare le impostazioni di raggruppamento con la libreria client.
Vai
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Go in Librerie client Pub/Sub Lite.
Java
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Java riportate in Librerie client Pub/Sub Lite.
Python
Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client Pub/Sub Lite.
Quando viene avviata un'applicazione publisher, la libreria client crea un batch per ogni partizione in un argomento Lite. Ad esempio, se un argomento Lite ha due partizioni, i publisher creano due batch e inviano ciascun batch a una partizione.
Dopo aver pubblicato un messaggio, la libreria client lo mette in buffer fino a quando il batch non supera le dimensioni massime della richiesta, il numero massimo di messaggi o il ritardo di pubblicazione.
Ordinamento dei messaggi
Gli argomenti Lite ordinano i messaggi in ogni partizione in base alla data di pubblicazione. Per assegnare i messaggi alla stessa partizione, utilizza una chiave di ordinamento.
Pub/Sub Lite consegna i messaggi di una partizione in ordine e i sottoscrittori possono elaborarli in ordine. Per maggiori dettagli, vedi Ricezione dei messaggi.
Identità di pubblicazione
Le librerie client Pub/Sub Lite supportano la pubblicazione idempotente a partire dalle seguenti versioni:
- java-pubsublite: versione 1.10.0.
- python-pubsublite: versione 1.8.0.
- google-cloud-go: versione 1.7.0 di pubsublite.
Se la pubblicazione di un messaggio viene ripetuta a causa di errori di rete o del server, viene memorizzata esattamente una volta. L'idempotenza è garantita solo all'interno della stessa sessione; non può essere garantita se lo stesso messaggio viene ripubblicato utilizzando un nuovo client editore. Non comporta costi aggiuntivi per il servizio né aumenta la latenza di pubblicazione.
Attivare o disattivare la pubblicazione idempotente
La pubblicazione idempotente è abilitata per impostazione predefinita nelle librerie client Pub/Sub Lite. Può essere disattivato utilizzando le impostazioni del client del publisher nella rispettiva biblioteca client.
Se la pubblicazione idempotente è attivata, l'offset restituito in un risultato di pubblicazione potrebbe essere -1
. Questo valore viene restituito quando il messaggio viene identificato come duplicato di un messaggio già pubblicato correttamente, ma il server non dispone di informazioni sufficienti per restituire l'offset del messaggio al momento della pubblicazione.
I messaggi ricevuti dagli iscritti hanno sempre un offset valido.
Risoluzione dei problemi
Duplicati ricevuti
Poiché l'idempotenza è limitata a una singola sessione, potrebbero essere ricevuti duplicati se ricrei il client publisher per pubblicare gli stessi messaggi.
Un client sottoscrittore potrebbe ricevere lo stesso messaggio più volte se le partizioni vengono assegnate automaticamente ai sottoscrittori dal servizio Pub/Sub Lite (l'impostazione predefinita). Un messaggio potrebbe essere recapitato di nuovo a un altro client abbonato quando si verifica una riassegnazione.
Errore del publisher
Lo stato di una sessione del publisher viene sottoposto a garbage collection nel server dopo 7 giorni di inattività. Se una sessione viene ripresa dopo questo periodo di tempo, il client publisher termina con un messaggio di errore simile a "Precondizione non soddisfatta: messaggio previsto con numero di sequenza di pubblicazione di…" e non accetta nuovi messaggi. Ricrea il client publisher per risolvere l'errore.