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 un 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 workflow di pubblicazione, assicurati di aver completato le seguenti attività:
- Scopri di più sul workflow di pubblicazione.
- Crea un argomento.
- Scegli e crea una sottoscrizione.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per pubblicare messaggi in un argomento, chiedi all'amministratore di concederti il ruolo IAM Pub/Sub Publisher (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.
Devi disporre di autorizzazioni aggiuntive per creare o aggiornare argomenti e sottoscrizioni.
Formato del messaggio
Un messaggio è composto 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 che indica quando 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.
I seguenti esempi 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 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 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 in base64 con i dati del messaggio
Il messaggio deve contenere un campo di dati non vuoto o almeno un attributo.
Se la richiesta ha esito positivo, 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 saperne di più, 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 saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.
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 in Guida rapida: 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: 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: 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: 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: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Python di Pub/Sub.
Ruby
L'esempio seguente utilizza la libreria client Ruby Pub/Sub v3. Se utilizzi ancora la libreria v2, consulta la guida alla migrazione alla v3. Per visualizzare un elenco di esempi di codice Ruby v2, consulta gli esempi di codice deprecati.
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.
Rust
Prima di provare questo esempio, segui le istruzioni di configurazione di Rust nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Rust.
Dopo aver pubblicato un messaggio, il servizio Pub/Sub restituisce l'ID messaggio al publisher.
Utilizza 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 nella sottoscrizione.
Segui queste linee guida per l'utilizzo degli attributi nei messaggi:
Puoi avere al massimo 100 attributi per messaggio.
Le chiavi e i valori degli attributi devono essere di tipo stringa. Non è richiesta alcuna codifica.
Le chiavi degli attributi non devono iniziare con
googe 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 nell'ambito della documentazione REST e RPC. Puoi utilizzare attributi personalizzati per i timestamp degli eventi.
I seguenti esempi mostrano come pubblicare un messaggio con attributi in un argomento.
Console
Per pubblicare un messaggio con attributi, segui questi passaggi:
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.
In Attributi messaggio, fai clic su Aggiungi un attributo.
Inserisci una coppia chiave-valore.
Se necessario, aggiungi altri attributi.
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 saperne di più, 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 saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.
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 in Guida rapida: 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: 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: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Python di Pub/Sub.
Ruby
L'esempio seguente utilizza la libreria client Ruby Pub/Sub v3. Se utilizzi ancora la libreria v2, consulta la guida alla migrazione alla v3. Per visualizzare un elenco di esempi di codice Ruby v2, consulta gli esempi di codice deprecati.
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.
Rust
Prima di provare questo esempio, segui le istruzioni di configurazione di Rust nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Rust.
Utilizza le chiavi di ordinamento per pubblicare un messaggio
Per ricevere i messaggi in ordine nei client sottoscrittori, devi configurare i client publisher in modo che pubblichino i messaggi con chiavi di ordinamento.
Per comprendere il concetto di chiavi di ordinamento, consulta Ordina i messaggi.
Di seguito è riportato un elenco di considerazioni principali 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 i 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 sottoscrittore li riceve nell'ordine 1, 2, 3.
Ordinamento tra 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 client publisher 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 sottoscrittori ricevono il messaggio di X prima di quello di Y. Se è richiesto un ordine rigoroso dei messaggi tra diversi client publisher, questi client devono implementare un meccanismo di coordinamento aggiuntivo per garantire che non pubblichino 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 tra regioni: la garanzia di consegna ordinata si applica solo quando le pubblicazioni per una chiave di ordinamento si trovano nella stessa regione. Se l'applicazione publisher pubblica messaggi con la stessa chiave di ordinamento in regioni diverse, l'ordine non può essere applicato a queste pubblicazioni. Gli iscritti 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 diGoogle Cloud generalmente garantisce l'interazione con una singola regione.
Quando esegui l'applicazione publisher al di fuori diGoogle Cloud o in più regioni, puoi garantire la connessione a una singola regione utilizzando un endpoint di località durante la configurazione del client Pub/Sub. Tutti gli endpoint di località per Pub/Sub puntano a singole regioni. Per scoprire di più sugli endpoint di località, consulta Endpoint Pub/Sub. Per un elenco di tutti gli endpoint di località per Pub/Sub, consulta Elenco degli endpoint di località.
Errori di pubblicazione: quando la pubblicazione con una chiave di ordinamento non va a buon fine, i messaggi in coda con la stessa chiave di ordinamento nel publisher non vanno a buon fine, incluse le richieste di pubblicazione future 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, segui questi passaggi:
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 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 in base64 con i dati del messaggio
- ORDERING_KEY: una stringa con una chiave di ordinamento
Il messaggio deve contenere un campo di dati non vuoto o almeno un attributo.
Se la richiesta ha esito positivo, 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 saperne di più, 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 saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.
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 in Guida rapida: 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: 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: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Python di Pub/Sub.
Ruby
L'esempio seguente utilizza la libreria client Ruby Pub/Sub v3. Se utilizzi ancora la libreria v2, consulta la guida alla migrazione alla v3. Per visualizzare un elenco di esempi di codice Ruby v2, consulta gli esempi di codice deprecati.
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.
Rust
Prima di provare questo esempio, segui le istruzioni di configurazione di Rust nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Rust.
Monitora un publisher
Cloud Monitoring fornisce una serie di metriche per monitorare gli argomenti.
Per monitorare un argomento e mantenere un publisher integro, consulta Mantieni un publisher integro.
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 Panoramica degli schemi.
Per scoprire come configurare le opzioni di consegna avanzate, consulta i seguenti articoli: