Questo documento fornisce informazioni sulla pubblicazione dei messaggi.
Un'applicazione publisher crea e invia messaggi a un argomento. Pub/Sub offre la distribuzione dei messaggi "at-least-once" e l'ordinamento best-effort ai sottoscrittori esistenti.
Il flusso generale per una richiesta di publisher è 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
)
nell'argomento.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci 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 abbonamenti, devi disporre di 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 di ricezione del messaggio da parte del servizio Pub/Sub
Per saperne 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 Google Cloud console, vai alla pagina Argomenti Pub/Sub.
Fai clic sull'ID argomento.
Nella pagina Dettagli dell'argomento, in Messaggi, fai clic su Pubblica messaggio.
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 del messaggio
- VALUE: il valore della chiave dell'attributo del 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 progetto 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 del messaggio
- VALUE: il valore della chiave dell'attributo del messaggio
- MESSAGE_DATA: una stringa con codifica base64 contenente 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 di C++ 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 di C# 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 nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, 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 nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub PHP.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.
Dopo aver pubblicato un messaggio, il servizio Pub/Sub restituisce l'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 utilizzare gli attributi nei tuoi messaggi:
Gli attributi possono essere stringhe di testo o stringhe di byte.
Puoi avere al massimo 100 attributi per messaggio.
Le chiavi attributo 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 visualizzare valori publishTime
diversi
per lo stesso messaggio originale lato client, anche con lo stesso messageId
.
Lo schema JSON PubsubMessage
viene pubblicato come parte della documentazione
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 Argomenti.
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.
Nella sezione 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 di C++ 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 di C# 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 nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.
Utilizza le chiavi di ordinamento per pubblicare un messaggio
Per ricevere i messaggi in ordine nei client abbonati, devi configurare i client publisher in modo che pubblichino i messaggi con le chiavi di ordinamento.
Per comprendere il concetto di ordinamento delle chiavi, vedi Ordinare i messaggi.
Di seguito è riportato un elenco di considerazioni chiave per la messaggistica ordinata per i client publisher:
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 riceve questi messaggi 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 su più client publisher: l'ordine dei messaggi ricevuti dai client sottoscrittori è 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 publisher stessi non sono a conoscenza di questo ordine.
Ad esempio, se i client 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 client abbonati ricevono il messaggio di X prima di quello di Y. Se è necessario un ordine rigoroso dei messaggi in diversi client publisher, questi client devono implementare un meccanismo di coordinamento aggiuntivo per garantire di non pubblicare messaggi con la stessa chiave di ordinamento contemporaneamente. Ad esempio, un servizio di blocco può essere utilizzato per mantenere la proprietà di una chiave di ordinamento durante la pubblicazione.
Ordinamento tra regioni: la garanzia di consegna ordinata si applica solo quando le pubblicazioni per una chiave di ordinamento si trovano nella stessa regione. Se la tua applicazione publisher pubblica messaggi con la stessa chiave di ordinamento in regioni diverse, l'ordine non può essere applicato a queste pubblicazioni. Gli abbonati possono connettersi a qualsiasi regione e la garanzia di ordinamento viene comunque mantenuta.
Quando esegui l'applicazione all'interno di Google Cloud, per impostazione predefinita si connette all'endpoint Pub/Sub nella stessa regione. Pertanto, l'esecuzione dell'applicazione in una singola regione all'interno di Google Cloud garantisce in genere l'interazione con una singola regione.
Quando esegui l'applicazione publisher al di fuori di Google Cloud o in più regioni, puoi garantire la connessione a una singola regione utilizzando un endpoint di localizzazione durante la configurazione del client Pub/Sub. Tutti gli endpoint di località per Pub/Sub puntano a singole regioni. Per saperne di più sugli endpoint regionali, consulta Endpoint Pub/Sub. Per un elenco di tutti gli endpoint geografici per Pub/Sub, consulta Elenco degli endpoint geografici.
Errori di pubblicazione: quando la pubblicazione con una chiave di ordinamento non va a buon fine, anche i messaggi in coda con la stessa chiave di ordinamento nell'editore non vanno a buon fine, incluse le future richieste di pubblicazione di questa chiave di ordinamento. In caso di errori di questo tipo, 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 Argomenti.
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 dei 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 progetto 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 del messaggio
- VALUE: il valore della chiave dell'attributo del messaggio
- MESSAGE_DATA: una stringa con codifica base64 contenente 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 di C++ 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 di C# 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 nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.
Monitorare un editore
Cloud Monitoring fornisce una serie di metriche per monitorare gli argomenti.
Per monitorare un argomento e mantenere un publisher in buona salute, consulta Mantenere un publisher in buona salute.
Passaggi successivi
Per limitare le località in cui Pub/Sub archivia i dati dei messaggi, consulta Limitazione delle località delle risorse Pub/Sub.
Per pubblicare messaggi con uno schema, consulta la panoramica degli schemi.
Per scoprire come configurare le opzioni di pubblicazione avanzate, consulta i seguenti articoli: