Questo documento presuppone che tu abbia già familiarità con la procedura di sottoscrizione a un argomento Pub/Sub e con la ricezione di messaggi nel tuo client sottoscrittore.
Se non hai mai utilizzato Pub/Sub, consulta una delle guide rapide e scopri come eseguire Pub/Sub utilizzando la console, Google Cloud CLI o le librerie client.
Scegliere l'abbonamento giusto
Pub/Sub offre sottoscrizioni standard come le sottoscrizioni push e pull. Oltre agli abbonamenti standard, Pub/Sub offre anche abbonamenti di esportazione che consentono di archiviare i messaggi direttamente in una risorsaGoogle Cloud , senza richiedere Dataflow come intermediario. Ad esempio, le sottoscrizioni BigQuery archiviano i messaggi in una tabella BigQuery.
Gli abbonamenti push sono consigliati per i seguenti scenari:
Non puoi includere codice nell'applicazione abbonato che importi la libreria client come dipendenza.
Il client abbonato non può effettuare richieste in uscita.
Vuoi utilizzare la stessa istanza per elaborare i messaggi di argomenti e abbonamenti diversi in cui il client sottoscrittore non conosce l'elenco degli abbonamenti.
Per i casi generali, consigliamo di utilizzare la
libreria client di alto livello. Se invece utilizzi
il pull unario, non impostare
returnImmediately
su true
. Se lo imposti su true
, le prestazioni di pull vengono compromesse.
Il campo returnImmediately
è stato ritirato.
Per confrontare tutti i tipi di abbonamento e scegliere quello più adatto alle tue esigenze aziendali, consulta la tabella di confronto degli abbonamenti Pub/Sub.
Per scoprire i vantaggi di un abbonamento all'esportazione, consulta Quando utilizzare un abbonamento all'esportazione.
Elaborare i messaggi prima di confermarli
Per impostazione predefinita, Pub/Sub elimina un messaggio da una sottoscrizione dopo che il messaggio è stato confermato. Se non elabori un messaggio prima di inviare una conferma e l'elaborazione non va a buon fine, il servizio non invia nuovamente il messaggio. L'unica eccezione è rappresentata dal caso in cui hai configurato la conservazione dei messaggi confermati o la conservazione degli argomenti ed esegui un'operazione di ricerca.
Se hai abbonati con latenza elevata, potresti dover impostare valori personalizzati per il controllo del flusso e la gestione dei lease.
Configurare il controllo del flusso degli abbonati per i picchi di traffico temporanei
Il controllo del flusso sul lato del sottoscrittore consente di evitare che i sottoscrittori vengano sovraccaricati da picchi di traffico. Può consentire ai meccanismi di scalabilità automatica di rispondere a un carico maggiore o può distribuire l'elaborazione del carico su un periodo di tempo più lungo. Il primo metodo consente di risparmiare latenza, mentre il secondo consente di risparmiare costi.
Per configurare il controllo del flusso, devi impostare
valori appropriati per maximum outstanding messages
e
total outstanding message bytes
. I valori predefiniti di queste variabili di controllo del flusso e i nomi delle variabili potrebbero variare a seconda delle librerie client.
Messaggi in attesa massimi definisce il numero massimo di messaggi consegnati al client per i quali Pub/Sub non ha ricevuto conferme o conferme negative.
Byte totali dei messaggi in sospeso definisce le dimensioni totali massime dei messaggi inviati al client per i quali Pub/Sub non ha ricevuto conferme o conferme negative.
Se viene superato il limite per una di queste opzioni, il client abbonato non recupera altri messaggi. Questo comportamento continua finché i messaggi già recuperati non vengono confermati o confermati negativamente. In questo modo, puoi bilanciare il throughput con il costo associato all'esecuzione di più abbonati.
Gestire le consegne duplicate
Per impostazione predefinita, Pub/Sub fornisce la consegna "at-least-once" dei messaggi ai sottoscrittori. Ciò significa che i messaggi possono essere recapitati più volte, anche se è stata ricevuta una conferma. Le sezioni seguenti descrivono come gestire gli scenari di riinvio comuni.
Riconsegna coerente di molti messaggi
Se riscontri casi in cui molti messaggi vengono sempre reinvitati, significa che i tuoi iscritti sono sovraccarichi o non confermano la ricezione dei messaggi prima della scadenza.
Se utilizzi un abbonamento pull, potresti dover impostare valori personalizzati per i valori di controllo del flusso o aumentare i periodi di estensione del lease utilizzando la gestione dei lease.
Se utilizzi abbonamenti push, potrebbe essere necessario aumentare l'impostazione della scadenza di riconoscimento. Puoi anche seguire le best practice su come mantenere una sottoscrizione in buono stato.
Riconsegna occasionale dei messaggi
Quando vedi che i messaggi vengono riconsegnati prima della scadenza della conferma o dopo che sono stati confermati entro pochi secondi, Pub/Sub si comporta come previsto. Non dovresti vedere questi picchi di riinvio di frequente, ma quando si verificano, è probabile che si verifichino su più messaggi contemporaneamente. Il sistema deve essere progettato per tollerare questi duplicati occasionali.
Riconsegna ripetuta di alcuni messaggi
Quando noti che un numero ridotto di messaggi viene consegnato più volte, innanzitutto conferma di averli riconosciuti. In caso contrario, scopri perché il tuo abbonato non gestisce correttamente i messaggi. Ti consigliamo di configurare un argomento messaggi non recapitabili per impedire ulteriori ridistribuzioni. Se stai confermando la ricezione del messaggio, Pub/Sub potrebbe comunque funzionare come previsto. Sebbene molto rari, è comunque possibile che un numero ridotto di messaggi venga recapitato più volte in caso di interruzioni interne della rete o dell'hardware. Il servizio tenta di auto-ripararsi in questi casi, ma l'attivazione delle soluzioni può richiedere diversi minuti.
Il sistema deve essere tollerante alle nuove consegne. Puoi ridurre la probabilità assicurandoti di elaborare e confermare la ricezione dei messaggi il più rapidamente possibile.
Se la tua applicazione non tollera duplicati, puoi attivare la consegna exactly-once. Ricorda che questa funzionalità è disponibile solo per gli abbonamenti pull e che comporta anche una latenza di pubblicazione-sottoscrizione più elevata. Valuta se il compromesso di una latenza maggiore è accettabile per il tuo caso d'uso prima di attivare questa funzionalità.
Best practice per la messaggistica ordinata durante l'iscrizione
Se utilizzi l'ordinamento dei messaggi, assicurati di quanto segue:
Scegli tra le sottoscrizioni StreamingPull o Pull. Per una sottoscrizione push, Pub/Sub supporta un solo messaggio in sospeso per ogni chiave di ordinamento alla volta. L'invio di richieste push parallele in uno scenario di questo tipo sarebbe simile all'invio di più batch di messaggi per la stessa chiave di ordinamento per eseguire il pull simultaneo dei sottoscrittori. Pertanto, gli abbonamenti push non sono consigliati per gli argomenti in cui vengono pubblicati frequentemente più messaggi con la stessa chiave di ordinamento o in cui la latenza è estremamente importante.
Attiva l'ordinamento dei messaggi nell'abbonamento. Dal lato del publisher, se invii messaggi con una chiave di ordinamento e nella stessa regione, puoi configurare i sottoscrittori in modo che ricevano i messaggi in ordine. Sul lato del sottoscrittore, attiva la proprietà di ordinamento dei messaggi solo per le sottoscrizioni per le quali vuoi ricevere messaggi ordinati. A seconda dello stato della proprietà, ogni sottoscrizione collegata all'argomento può determinare se è necessaria la distribuzione ordinata senza influire l'una sull'altra.
Riconoscere i messaggi in ordine. Quando utilizzi la consegna ordinata, le conferme di ricezione dei messaggi successivi non vengono elaborate finché non vengono elaborate le conferme di ricezione dei messaggi precedenti per chiave di ordinamento. Ad esempio, se hai i messaggi 1, 2 e 3 con la stessa chiave di ordinamento e li ricevi tutti e confermi solo il messaggio 3, il servizio non considera il messaggio 3 come confermato finché non vengono confermati anche i messaggi 1 e 2. Se le conferme per i messaggi 1 e 2 non vengono mai ricevute, i messaggi 1, 2 e 3 vengono tutti inviati nuovamente.
Riepilogo delle best practice
La tabella seguente riepiloga le best practice consigliate in questo documento:
Argomento | Attività |
---|---|
Scegliere un tipo di abbonamento | Scegli il tipo di abbonamento più adatto alle esigenze della tua attività. Se supportata dal tuo abbonamento, utilizza anche la libreria client di alto livello. |
Riprodurre di nuovo un messaggio confermato | Elaborare un messaggio prima di confermarlo. In alternativa, configura un'operazione di ricerca in modo da non perdere i messaggi confermati. |
Controllo del flusso | Configura il controllo del flusso nelle impostazioni degli abbonati per assicurarti che gli abbonati non vengano sovraccaricati finché non viene attivato lo scalabilità automatica o non passa del tempo. |
Ordinamento dei messaggi | Quando utilizzi la messaggistica ordinata, scegli StreamingPull o Pull, attiva l'ordinamento dei messaggi nella sottoscrizione e conferma i messaggi in ordine. |