Gli errori di pubblicazione sono generalmente causati dal lato client come colli di bottiglia, come CPU di servizio insufficienti, integrità dei thread non ottimale la congestione della rete. Il criterio relativo ai nuovi tentativi del publisher definisce il numero di voltePub/Sub tenta di recapitare un messaggio e la durata tra un tentativo e l'altro.
Questo documento fornisce informazioni sull'utilizzo di richieste di nuovo tentativo con i messaggi pubblicato in un argomento.
Prima di iniziare
Prima di configurare il flusso di lavoro di pubblicazione, assicurati di aver completato quanto segue attività:
- Scopri di più su argomenti e flusso di lavoro di pubblicazione.
- Crea un argomento.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per ritentare le richieste di messaggi a un argomento,
chiedi all'amministratore di concederti
Ruolo IAM Pub/Sub Publisher (roles/pubsub.publisher
) nell'argomento.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Devi avere autorizzazioni aggiuntive per creare o aggiornare argomenti e sottoscrizioni.
Informazioni sulle richieste di nuovo tentativo
Le impostazioni relative ai nuovi tentativi controllano il modo in cui le librerie client di Pub/Sub effettuano i nuovi tentativi richieste di pubblicazione. Le librerie client hanno una delle seguenti impostazioni per i nuovi tentativi:
- Timeout richiesta iniziale: la quantità di tempo che deve trascorrere prima che una libreria client smette di attendere il completamento della richiesta di pubblicazione iniziale.
- Ritardo nuovo tentativo: il periodo di tempo dopo il quale una richiesta scade in cui un client La libreria attende prima di riprovare la richiesta.
- Timeout totale: il periodo di tempo dopo il quale una libreria client smette di eseguire nuovamente i tentativi. richieste di pubblicazione.
Per ritentare le richieste di pubblicazione, il timeout iniziale della richiesta deve essere inferiore al timeout totale. Ad esempio, se utilizzi il backoff esponenziale, il client calcolano il timeout della richiesta e il ritardo tra i nuovi tentativi come segue:
- Dopo ogni richiesta di pubblicazione, il timeout della richiesta aumenta del moltiplicatore di timeout della richiesta, fino al timeout massimo della richiesta.
- Dopo ogni nuovo tentativo, il ritardo aumenta del moltiplicatore di ripetizione, fino al ritardo massimo tra nuovi tentativi.
Riprovare una richiesta di messaggi
Durante la procedura di pubblicazione, potresti vedere una pubblicazione temporanea o permanente errori. Per gli errori temporanei, di solito non è necessario utilizzare elementi speciali perché Pub/Sub ritenta automaticamente i messaggi.
Può verificarsi un errore anche quando un'operazione di pubblicazione ha esito positivo, ma la risposta non viene ricevuta in tempo dal cliente del publisher. Anche in questo caso, con un nuovo tentativo dell'operazione di pubblicazione. Di conseguenza, puoi avere due messaggi identici con ID messaggio diversi.
In caso di errori persistenti, valuta la possibilità di implementare le azioni appropriate al di fuori del processo di pubblicazione per evitare di sovraccaricare Pub/Sub.
Gli errori di pubblicazione vengono ritentati automaticamente, ad eccezione degli errori che non nuovi tentativi in garanzia. Questo codice campione illustra la creazione di un publisher con impostazioni relative ai nuovi tentativi (tieni presente che non tutte le librerie client supportano nuovi tentativi personalizzati) impostazioni; consulta la documentazione di riferimento API per la lingua scelta):
C++
Prima di provare questo esempio, segui le istruzioni per la configurazione di C++ in 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API C# Pub/Sub.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in 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 in 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 in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python Pub/Sub.
Riprova le richieste con chiavi di ordinamento
Supponi di avere un solo cliente publisher. Stai utilizzando Librerie client di Pub/Sub per pubblicare i messaggi 1, 2 e 3 per il chiave di ordinamento A. Supponiamo ora che la risposta pubblicata per il messaggio 1 sia non ricevuto dal client publisher prima della scadenza della RPC. Messaggio 1 devono essere ripubblicati. La sequenza di messaggi ricevuti dal client del sottoscrittore diventa 1, 1, 2 e 3, se presupponi che il messaggio 2 sia pubblicato solo dopo messaggio 1 completato correttamente. Ogni messaggio pubblicato ha il suo ID messaggio. Dal punto di vista del client sottoscrittore, quattro messaggi sono stati pubblicate, con i primi due contenuti identici.
Anche ritentare le richieste di pubblicazione con chiavi di ordinamento può essere complicato dal batch impostazioni. La libreria client raggruppa i messaggi in modo più efficiente pubblicazione. Continua con l'esempio precedente e supponiamo che i messaggi 1 e 2 vengono raggruppati insieme. Questo batch viene inviato al server come singola richiesta. Se il server non riesce a restituire una risposta in tempo, il client del publisher proverà di nuovo gruppo di due messaggi. Pertanto, è possibile che il client sottoscrittore riceve i messaggi 1, 2, 1, 2 e 3. Se utilizzi Pub/Sub libreria client per pubblicare i messaggi in ordine e un'operazione di pubblicazione non riesce, il servizio non riesce a eseguire le operazioni di pubblicazione per tutti i messaggi rimanenti sulla stessa chiave di ordinamento. Un publisher cliente può quindi decidere di seguire uno qualsiasi dei le seguenti operazioni:
Ripubblica tutti i messaggi con errori nell'ordine
Ripubblica un sottoinsieme dei messaggi con errori nell'ordine
Pubblica un nuovo insieme di messaggi
Se si verifica un errore che non è possibile ripetere, la libreria client non pubblica il messaggio e interrompe la pubblicazione di altri messaggi con la stessa chiave di ordinamento. Ad esempio: quando un publisher invia un messaggio a un argomento che non esiste, una richiesta si verifica un errore. Per continuare a pubblicare messaggi con la stessa chiave di ordinamento, chiama un per riprendere la pubblicazione e poi riavviarla.
L'esempio seguente mostra come riprendere la pubblicazione di messaggi con lo stesso chiave di ordinamento.
C++
Prima di provare questo esempio, segui le istruzioni per la configurazione di C++ in 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# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API C# Pub/Sub.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in 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 in 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 in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Passaggi successivi
Per scoprire come configurare le opzioni di pubblicazione avanzate, consulta quanto segue: