Questo documento fornisce informazioni sulla pubblicazione dei messaggi.
Un'applicazione publisher crea e invia messaggi a un argomento. Pub/Sub offre la consegna di messaggi almeno una volta e il migliore tentativo per gli abbonati esistenti.
Il flusso generale per un'applicazione dell'editore è:
- 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à:
Crea un argomento.
(Facoltativo) Crea un abbonamento.
Formato del messaggio
Un messaggio è costituito da campi con i dati del messaggio e i metadati. Specifica almeno uno dei seguenti valori nel messaggio:
- Dati del messaggio
- Una chiave di ordinazione
- Attributi con metadati aggiuntivi
Se utilizzi l'API REST, i dati dei messaggi devono essere codificati in base64.
Il servizio Pub/Sub aggiunge i seguenti campi al messaggio:
- Un ID messaggio univoco per l'argomento
- Un timestamp per la ricezione del messaggio dal servizio Pub/Sub
Pubblica dei messaggi
Puoi pubblicare messaggi con Google Cloud CLI o l'API Pub/Sub. Le librerie client possono pubblicare messaggi in modo asincrono.
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.
(Facoltativo) Aggiungi gli attributi del messaggio.
Fai clic su Aggiungi un attributo.
Inserisci una chiave e un valore per l'attributo.
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 di 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 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 di messaggio
- VALUE: il valore della chiave dell'attributo del messaggio
- MESSAGE_DATA: una stringa con codifica base64 con i dati dei messaggi
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. Il seguente esempio è una risposta con un ID messaggio:
{ "messageIds": [ "19916711285", ] }
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Dopo aver pubblicato un messaggio, il servizio Pub/Sub restituisce l'ID messaggio al publisher.
Utilizza gli attributi
Puoi incorporare attributi personalizzati come metadati nei messaggi Pub/Sub. Gli attributi possono essere stringhe di testo o stringhe di byte. Puoi avere al massimo 100 attributi per messaggio.
Le chiavi degli attributi non possono iniziare con goog
e non superare i 256 byte.
I valori degli attributi non devono superare i 1024 byte. Lo schema di messaggi può essere
rappresentato come segue:
{ "data": string, "attributes": { string: string, ... }, "messageId": string, "publishTime": string, "orderingKey": string }
Lo schema JSON PubsubMessage
viene pubblicato come parte della documentazione di REST e RPC.
gcloud
gcloud pubsub topics publish my-topic --message="hello" \ --attribute="origin=gcloud-sample,username=gcp"
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Usa i tasti di ordinazione
Se i messaggi hanno la stessa chiave di ordinamento e li pubblichi nella stessa area geografica, i sottoscrittori possono riceverli in ordine. La pubblicazione di messaggi con chiavi di ordinamento potrebbe aumentare la latenza. Per pubblicare messaggi nella stessa area geografica, utilizza un endpoint a livello di area geografica.
Puoi pubblicare messaggi con chiavi di ordinamento utilizzando la console Google Cloud, Google Cloud CLI o l'API Pub/Sub.
Console
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.
Inserisci una chiave di ordinamento nel campo Ordine messaggi.
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 simile alla 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 di messaggio
- VALUE: il valore della chiave dell'attributo del messaggio
- MESSAGE_DATA: una stringa con codifica base64 con i dati dei messaggi
- 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. Il seguente esempio è una risposta con un ID messaggio:
{ "messageIds": [ "19916711285", ] }
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Se la pubblicazione con una chiave di ordinamento non riesce, i messaggi in coda della stessa chiave di ordinamento nel publisher non andranno a buon fine, incluse le richieste di pubblicazione future di questa chiave di ordinamento. Devi riprendere la pubblicazione con le chiavi di ordinamento quando si verificano questi errori. Per un esempio di ripresa dell'operazione di pubblicazione, consulta la pagina Riprovare le richieste con chiavi di ordinamento.
Usa lo schema
Puoi pubblicare messaggi in un argomento associato a uno schema. Per scoprire di più, vedi Creare e gestire gli schemi. Devi codificare i messaggi nello schema e nel formato specificati quando hai creato l'argomento.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Avro ProtocolloC#
Prima di provare questo esempio, segui le istruzioni di configurazione di C# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Avro ProtocolloGo
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Go.
Avro ProtocolloJava
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Avro ProtocolloNode.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
Avro Buffer di protocolloPHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.
Avro Buffer di protocolloPython
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Avro Buffer di protocolloRuby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Avro Buffer di protocolloMessaggi collettivi in una richiesta di pubblicazione
Puoi utilizzare la libreria client Pub/Sub del tuo publisher per pubblicare messaggi in un argomento. La libreria client utilizza la funzionalità batch per pubblicare più messaggi insieme in una chiamata di servizio. Il raggruppamento o il raggruppamento di messaggi aiuta Pub/Sub a raggiungere una velocità effettiva più elevata dei messaggi. È possibile regolare le dimensioni del batch in base alle proprie esigenze aziendali.
In una libreria client è abilitata per impostazione predefinita la messaggistica batch. La messaggistica batch crea latenza per i singoli messaggi. I singoli messaggi devono essere messi in coda in memoria fino al completamento del corrispondente batch. Solo allora, i messaggi verranno pubblicati nell'argomento.
Se il costo non è considerato ai fini della considerazione, puoi creare più client publisher e disattivare i messaggi in batch. Questo processo riduce al minimo la latenza e massimizza la velocità effettiva scalando orizzontalmente sul numero di publisher. Tuttavia, il costo è spesso una considerazione. Inviare più messaggi in una singola richiesta di pubblicazione è un modo per raggiungere la velocità effettiva equivalente con meno publisher. Se siete disposti a scambiare una latenza per il risparmio sui costi, specialmente se la vostra applicazione gestisce un numero abbastanza elevato di messaggi in un breve periodo di tempo, potete utilizzare i messaggi in batch.
La messaggistica batch consente di configurare le dimensioni del batch in byte o il numero di messaggi e anche l'ora dopo la quale questo viene pubblicato. Piccoli gruppi di messaggi durante i momenti di picco della pubblicazione possono aiutarti a controllare la latenza.
Configurare la messaggistica batch in una libreria client
Puoi raggruppare i messaggi in base alle dimensioni della richiesta, al numero di messaggi e all'ora. I valori predefiniti per le variabili di messaggistica batch e i nomi delle variabili potrebbero variare nelle librerie client. Ad esempio, nella libreria client Python, le seguenti variabili controllano la messaggistica in batch:
Variabile | Descrizione | Valore |
---|---|---|
max_messages | Il numero di messaggi di un gruppo. | Valore predefinito=100 |
max_byte | Le dimensioni massime di un batch in MB. | Valore predefinito=1 MB |
latenza_massima | L'ora dopo la quale viene pubblicato un batch, anche se non è stato riempito. | Predefinito=10 ms |
Puoi specificare uno o tutti e tre i valori nella libreria client. Se uno dei valori delle variabili di messaggistica batch viene soddisfatto, la libreria client pubblica il gruppo di messaggi successivo.
Consulta i seguenti esempi di codice per scoprire come configurare le impostazioni di messaggistica batch per il tuo editore.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Disattiva la messaggistica collettiva
Per disattivare il batch nella libreria client, imposta max_messages
su 1.
Messaggi collettivi e recapito ordinato
Se la consegna è ordinata, se non si conferma alcun messaggio nel batch, tutti i messaggi del batch, inclusi quelli inviati prima del messaggio non confermato, vengono riconsegnati.
Quote e limiti per i messaggi in batch
Prima di configurare la messaggistica batch, considera l'effetto di fattori quali la quota di velocità effettiva di pubblicazione e la dimensione massima di un batch. Le librerie client di alto livello assicurano che le richieste batch vengano mantenute entro i limiti specificati.
- 1000 byte è la dimensione minima della richiesta considerata ai fini dei costi, anche se la dimensione effettiva del messaggio potrebbe essere inferiore a 1000 byte.
- Pub/Sub ha un limite di 10 MB o di 1000 messaggi per una singola richiesta di pubblicazione in batch.
Per ulteriori informazioni, consulta Quote e limiti di Pub/Sub.
Comprimi messaggi
Se utilizzi Pub/Sub per pubblicare messaggi che corrispondono a una quantità elevata di dati, puoi utilizzare gRPC per comprimere i dati per risparmiare sui costi di networking prima che il client dell'editore invii la richiesta di pubblicazione. La compressione Pub/Sub per gRPC utilizza l'algoritmo Gzip.
Il rapporto di compressione dell'utilizzo della funzionalità di compressione lato client gRPC è diverso per i vari client di publisher e dipende dai seguenti fattori:
Quantità di dati. Il rapporto di compressione migliora quando le dimensioni del payload aumentano da alcune centinaia a byte e molti kilobyte di dati. Le impostazioni batch di una richiesta di pubblicazione determinano la quantità di dati inclusa in ogni richiesta di pubblicazione. Per ottenere i risultati migliori, ti consigliamo di attivare le impostazioni batch in combinazione con la compressione gRPC.
Tipo di dati. I dati basati su testo, come JSON o XML, sono più comprimibili rispetto ai dati binari, come le immagini.
Se il tuo client publisher è su Google Cloud, puoi utilizzare la metrica Byte inviati (instance/network/sent_bytes_count
) per misurare la velocità effettiva di pubblicazione in byte. Se il client del publisher utilizza un'applicazione diversa, devi utilizzare gli strumenti specifici del client per effettuare la misurazione.
L'esempio di codice in questa sezione mostra uno snippet di codice della libreria client Java di esempio che include anche la compressione gRPC.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Richieste di nuovi tentativi
Gli errori di pubblicazione vengono ripetuti automaticamente, ad eccezione degli errori che non garantiscono nuovi tentativi. Questo codice campione mostra la creazione di un editore con impostazioni di ripetizione personalizzate (tieni presente che non tutte le librerie client supportano le impostazioni personalizzate dei nuovi tentativi; consulta la documentazione di riferimento dell'API per la lingua scelta):
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Le impostazioni di nuovo tentativo controllano in che modo le librerie client di Pub/Sub provano a pubblicare nuovamente le richieste. Le librerie client hanno una delle seguenti impostazioni per nuovi tentativi:
- Timeout richiesta iniziale: il periodo di tempo prima che una libreria client smetta di completare la richiesta di pubblicazione iniziale.
- Ritardo dei tentativi: il periodo di tempo dopo che una richiesta scade quando una libreria client attende di riprovare la richiesta.
- Timeout totale: il periodo di tempo successivo all'interruzione della pubblicazione di nuove richieste di pubblicazione da parte della libreria client.
Per riprovare a pubblicare le richieste, il timeout iniziale della richiesta deve essere inferiore al timeout totale. Ad esempio, se utilizzi il backoff esponenziale, le librerie client calcolano il timeout della richiesta e i ritardi nel nuovo tentativo come segue:
- Dopo ogni richiesta di pubblicazione, il timeout viene aumentato del moltiplicatore, fino al valore massimo della richiesta.
- Dopo ogni nuovo tentativo, il ritardo viene aumentato del moltiplicatore fino al massimo.
Riprovare le richieste con chiavi di ordinamento
Quando una libreria client tenta di nuovo una richiesta e il messaggio ha una chiave di ordinamento, la libreria client ripeterà ripetutamente la richiesta, indipendentemente dalle impostazioni Riprova.
Se si verifica un errore non irreversibile, la libreria client non pubblica il messaggio e interrompe la pubblicazione di altri messaggi con la stessa chiave di ordinamento. Ad esempio, quando un editore invia un messaggio a un argomento che non esiste, si verifica un errore non irreversibile. Per continuare a pubblicare i messaggi con la stessa chiave di ordinamento, chiama un metodo per riprendere la pubblicazione e ricominciare a pubblicarla.
L'esempio seguente mostra come riprendere la pubblicazione dei messaggi con la stessa chiave di ordinamento.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Controllo del flusso
Un client dell'editore può tentare di pubblicare messaggi più velocemente di quanto il client sia in grado di inviare dati al servizio Pub/Sub. I client sono limitati da molti fattori, tra cui:
- CPU, RAM e capacità della rete della macchina
- Impostazioni della rete, ad esempio il numero di richieste in sospeso e la larghezza di banda disponibile
- La latenza di ogni richiesta di pubblicazione, in gran parte determinata dalle connessioni di rete tra il servizio Pub/Sub, il client e Google Cloud.
Se la frequenza di richieste di pubblicazione supera questi limiti, le richieste si accumulano in memoria finché non vanno a buon fine con un errore DEADLINE_EXCEEDED
. Ciò è particolarmente probabile quando decine di migliaia di messaggi vengono pubblicati in loop, generando migliaia di richieste in millisecondi.
Puoi diagnosticare questo problema controllando le metriche lato server in Monitoring. Non potrai visualizzare le richieste non riuscite con DEADLINE_EXCEEDED
, ma solo le richieste riuscite. La frequenza delle richieste riuscite indica la capacità di velocità effettiva delle macchine client, fornendo una base di riferimento per configurare il controllo del flusso.
Per mitigare i problemi di portata, configura il tuo client di publisher con il controllo del flusso per limitare la frequenza delle richieste di pubblicazione. Puoi configurare il numero massimo di byte allocati per le richieste in sospeso e il numero massimo consentito di messaggi in sospeso. Imposta questi limiti in base alla capacità di velocità effettiva delle macchine client.
Il controllo del flusso degli editori è disponibile tramite le librerie client Pub/Sub nelle seguenti lingue:
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.
Controllo della contemporaneità
Il supporto della contemporaneità dipende dal linguaggio di programmazione. Per ulteriori informazioni, consulta la documentazione di riferimento delle API.
Il seguente esempio illustra come controllare la contemporaneità in un publisher:
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'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 ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.
Monitorare un publisher
Cloud Monitoring offre una serie di metriche per monitorare gli argomenti.
Per monitorare un argomento e gestire un publisher integro, consulta Mantenere 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 scoprire di più sulla ricezione dei messaggi, consulta Scegliere un tipo di abbonamento.