Questo documento fornisce informazioni sulla pubblicazione dei messaggi.
Un'applicazione publisher crea e invia messaggi a un argomento. Pub/Sub offre la consegna dei messaggi "at-least-once" e l'ordinamento con il criterio del massimo impegno ai sottoscrittori esistenti.
Il flusso generale per un'applicazione di editore è il seguente:
- Crea un messaggio contenente i tuoi dati.
- Invia una richiesta al server Pub/Sub per pubblicare il messaggio nell'argomento specificato.
Prima di iniziare
Prima di configurare il flusso di lavoro di pubblicazione, assicurati di aver completato le seguenti attività:
- Scopri di più sul flusso di lavoro di pubblicazione.
- Crea un argomento.
- Scegli e crea un abbonamento.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per pubblicare messaggi in un argomento,
chiedi all'amministratore di concederti il ruolo IAM Publisher Pub/Sub (roles/pubsub.publisher
) per l'argomento.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Per creare o aggiornare argomenti e iscrizioni, sono necessarie autorizzazioni aggiuntive.
Formato messaggio
Un messaggio è costituito da campi con i dati e i metadati del messaggio. Specifica almeno uno dei seguenti elementi nel messaggio:
- I dati del messaggio
- Una chiave di ordinamento
- Attributi con metadati aggiuntivi
Il servizio Pub/Sub aggiunge i seguenti campi al messaggio:
- Un ID messaggio univoco per l'argomento
- Un timestamp del momento in cui il servizio Pub/Sub riceve il messaggio
Per scoprire di più sui messaggi, consulta Formato dei messaggi.
pubblica dei messaggi
Puoi pubblicare messaggi con la console Google Cloud, Google Cloud CLI, l'API Pub/Sub e le librerie client. Le librerie client possono pubblicare messaggi in modo asincrono.
Gli esempi riportati di seguito mostrano come pubblicare un messaggio in un argomento.
Console
Per pubblicare un messaggio:
Nella console Google Cloud, vai alla pagina Argomenti Pub/Sub.
Fai clic sull'ID argomento.
Nella pagina Dettagli dell'argomento, fai clic su Pubblica messaggio in Messaggi.
Nel campo Corpo del messaggio, inserisci i dati del messaggio.
Fai clic su Pubblica.
gcloud
Per pubblicare un messaggio, utilizza il comando gcloud pubsub topics publish:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ [--attribute=KEY="VALUE",...]
Sostituisci quanto segue:
- TOPIC_ID: l'ID dell'argomento
- MESSAGE_DATA: una stringa con i dati del messaggio
- KEY: la chiave di un attributo messaggio
- VALUE: il valore della chiave dell'attributo messaggio
REST
Per pubblicare un messaggio, invia una richiesta POST come la seguente:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto con l'argomento
- TOPIC_ID: l'ID dell'argomento
Specifica i seguenti campi nel corpo della richiesta:
{ "messages": [ { "attributes": { "KEY": "VALUE", ... }, "data": "MESSAGE_DATA", } ] }
Sostituisci quanto segue:
- KEY: la chiave di un attributo messaggio
- VALUE: il valore della chiave dell'attributo messaggio
- MESSAGE_DATA: una stringa con codifica base64 con i dati del messaggio
Il messaggio deve contenere un campo dati non vuoto o almeno un attributo.
Se la richiesta riesce, la risposta è un oggetto JSON con l'ID messaggio. L'esempio seguente è una risposta con un ID messaggio:
{ "messageIds": [ "19916711285", ] }
C++
Prima di provare questo esempio, segui le istruzioni di configurazione C++ riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Dopo aver pubblicato un messaggio, il servizio Pub/Sub restituisce il ID messaggio al publisher.
Utilizzare gli attributi per pubblicare un messaggio
Puoi incorporare attributi personalizzati come metadati nei messaggi Pub/Sub. Gli attributi vengono utilizzati per fornire informazioni aggiuntive sul messaggio, come priorità, origine o destinazione. Gli attributi possono essere utilizzati anche per filtrare i messaggi nell'abbonamento.
Segui queste linee guida per l'utilizzo degli attributi nei messaggi:
Gli attributi possono essere stringhe di testo o stringhe di byte.
Puoi avere al massimo 100 attributi per messaggio.
Le chiavi degli attributi non devono iniziare con
goog
e non devono superare i 256 byte.I valori degli attributi non devono superare i 1024 byte.
Lo schema del messaggio può essere rappresentato come segue:
{ "data": string, "attributes": { string: string, ... }, "messageId": string, "publishTime": string, "orderingKey": string }
Per i duplicati lato pubblicazione, è possibile vedere valori publishTime
diversi per lo stesso messaggio originale lato client, anche con lo stesso messageId
.
Lo schema JSON PubsubMessage
viene pubblicato nell'ambito della documentazione di REST e RPC. Puoi utilizzare attributi personalizzati per i timestamp degli eventi.
Gli esempi riportati di seguito mostrano come pubblicare un messaggio con attributi in un argomento.
Console
Per pubblicare un messaggio con attributi:
Nella console Google Cloud, vai alla pagina Topic.
Fai clic sull'argomento per cui vuoi pubblicare i messaggi.
Nella pagina dei dettagli dell'argomento, fai clic su Messaggi.
Fai clic su Pubblica messaggio.
Nel campo Corpo del messaggio, inserisci i dati del messaggio.
In Attributi messaggio, fai clic su Aggiungi un attributo.
Inserisci una coppia chiave-valore.
Aggiungi altri attributi, se necessario.
Fai clic su Pubblica.
gcloud
gcloud pubsub topics publish my-topic --message="hello" \ --attribute="origin=gcloud-sample,username=gcp,eventTime='2021-01-01T12:00:00Z'"
C++
Prima di provare questo esempio, segui le istruzioni di configurazione C++ riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Utilizzare le chiavi di ordinamento per pubblicare un messaggio
Per ricevere i messaggi in ordine nei client sottoscrittore, devi configurare i client publisher in modo che pubblichino i messaggi con chiavi di ordinamento.
Per comprendere il concetto di chiavi di ordinamento, consulta Ordinare i messaggi.
Di seguito è riportato un elenco di considerazioni chiave per i messaggi in ordine per i clienti editore:
Ordinamento in un singolo client publisher: quando un singolo client publisher pubblica messaggi con la stessa chiave di ordinamento nella stessa regione, il client sottoscrittore li riceve nell'ordine esatto in cui sono stati pubblicati. Ad esempio, se un client publisher pubblica i messaggi 1, 2 e 3 con la chiave di ordinamento A, il client subscriber li riceve nell'ordine 1, 2, 3.
Ordinamento in più client publisher: l'ordine dei messaggi ricevuti dai client sottoscrittore è coerente con l'ordine in cui sono stati pubblicati nella stessa regione, anche quando più client publisher utilizzano la stessa chiave di ordinamento. Tuttavia, i clienti del publisher non sono a conoscenza di questo ordine.
Ad esempio, se i clienti publisher X e Y pubblicano ciascuno messaggi con la chiave di ordinamento A e il messaggio di X viene ricevuto da Pub/Sub prima di quello di Y, tutti i clienti subscriber ricevono il messaggio di X prima di quello di Y. Se è richiesto un ordinamento rigoroso dei messaggi su diversi client editore, questi client devono implementare un ulteriore meccanismo di coordinamento per assicurarsi di non pubblicare contemporaneamente messaggi con la stessa chiave di ordinamento. Ad esempio, un servizio di blocco può essere utilizzato per mantenere la proprietà di una chiave di ordinamento durante la pubblicazione.
Ordinamento in più regioni: la garanzia di invio ordinato si applica solo quando le pubblicazioni per una chiave di ordinamento si trovano nella stessa regione. Se la tua applicazione editore pubblica messaggi con la stessa chiave di ordinamento in regioni diverse, l'ordine non può essere applicato a queste pubblicazioni. Gli abbonati possono collegarsi a qualsiasi regione e la garanzia di ordinamento viene comunque mantenuta.
Quando esegui l'applicazione in Google Cloud, per impostazione predefinita si connette all'endpoint Pub/Sub nella stessa regione. Pertanto, l'esecuzione dell'applicazione in un'unica regione in Google Cloud garantisce in genere che tu stia interagendo con una singola regione.
Quando esegui l'applicazione publisher al di fuori di Google Cloud o in più regioni, puoi assicurarti di connetterti a una singola regione utilizzando un endpoint geografico durante la configurazione del client Pub/Sub. Tutti gli endpoint posizione per Pub/Sub rimandano a singole regioni. Per saperne di più sugli endpoint geografici, consulta Endpoint Pub/Sub. Per un elenco di tutti gli endpoint geografici per Pub/Sub, consulta Elenco di endpoint geografici.
Errori di pubblicazione: quando la pubblicazione con una chiave di ordinamento non va a buon fine, i messaggi in coda della stessa chiave di ordinamento nel publisher non vanno a buon fine, incluse le future richieste di pubblicazione di questa chiave di ordinamento. Quando si verificano questi errori, devi riprendere la pubblicazione con le chiavi di ordinamento. Per un esempio di ripresa dell'operazione di pubblicazione, consulta Riprova le richieste con chiavi di ordinamento.
Puoi pubblicare messaggi con chiavi di ordinamento utilizzando la console Google Cloud, Google Cloud CLI, l'API Pub/Sub o le librerie client.
Console
Per pubblicare un messaggio con attributi:
Nella console Google Cloud, vai alla pagina Topic.
Fai clic sull'argomento per cui vuoi pubblicare i messaggi.
Nella pagina dei dettagli dell'argomento, fai clic su Messaggi.
Fai clic su Pubblica messaggio.
Nel campo Corpo del messaggio, inserisci i dati del messaggio.
Nel campo Ordinamento messaggi, inserisci una chiave di ordinamento.
Fai clic su Pubblica.
gcloud
Per pubblicare un messaggio con una chiave di ordinamento, utilizza il comando
gcloud pubsub topics publish
e il flag --ordering-key
:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ --ordering-key=ORDERING_KEY
Sostituisci quanto segue:
- TOPIC_ID: l'ID dell'argomento
- MESSAGE_DATA: una stringa con i dati del messaggio
- ORDERING_KEY: una stringa con una chiave di ordinamento
REST
Per pubblicare un messaggio con una chiave di ordinamento, invia una richiesta POST come la seguente:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto con l'argomento
- TOPIC_ID: l'ID dell'argomento
Specifica i seguenti campi nel corpo della richiesta:
{ "messages": [ { "attributes": { "KEY": "VALUE", ... }, "data": "MESSAGE_DATA", "ordering_key": "ORDERING_KEY", } ] }
Sostituisci quanto segue:
- KEY: la chiave di un attributo messaggio
- VALUE: il valore della chiave dell'attributo messaggio
- MESSAGE_DATA: una stringa con codifica base64 con i dati del messaggio
- ORDERING_KEY: una stringa con una chiave di ordinamento
Il messaggio deve contenere un campo dati non vuoto o almeno un attributo.
Se la richiesta riesce, la risposta è un oggetto JSON con l'ID messaggio. L'esempio seguente è una risposta con un ID messaggio:
{ "messageIds": [ "19916711285", ] }
C++
Prima di provare questo esempio, segui le istruzioni di configurazione C++ riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Monitorare un editore
Cloud Monitoring fornisce una serie di metriche per monitorare gli argomenti.
Per monitorare un argomento e mantenere un publisher in salute, consulta Mantenere un publisher in salute.
Passaggi successivi
Per limitare le località in cui Pub/Sub archivia i dati dei messaggi, consulta Limitare le località delle risorse Pub/Sub.
Per pubblicare messaggi con schema, consulta la Panoramica degli schemi.
Per scoprire come configurare le opzioni di importazione avanzate, consulta quanto segue: