Il controllo della concorrenza è una funzionalità disponibile nella libreria client Pub/Sub di alto livello. Puoi anche implementare il tuo controllo della contemporaneità quando utilizzi una libreria di basso livello.
Il supporto per controllo della contemporaneità dipende dal linguaggio di programmazione della libreria client. Per le implementazioni di linguaggi che supportano thread paralleli, come C++, Go e Java, le librerie client effettuano una scelta predefinita per il numero di thread.
Questa scelta potrebbe non essere ottimale per la tua applicazione. Ad esempio, se la tua applicazione di sottoscrittore non tiene il passo con il volume di messaggi in arrivo e non è vincolata alla CPU, devi aumentare il numero di thread. Per le operazioni di elaborazione dei messaggi che richiedono un utilizzo intensivo della CPU, potrebbe essere appropriato ridurre il numero di thread.
Questa pagina spiega il concetto di controllo della contemporaneità e come configurare la funzionalità per i client di sottoscrizione. Per configurare i client publisher per controllo della contemporaneità, consulta Controllo della concorrenza.
Configurazioni del controllo della concorrenza
I valori predefiniti per le variabili di controllo della contemporaneità e i nomi delle variabili potrebbero variare a seconda delle librerie client. Per saperne di più, consulta la
documentazione di riferimento dell'API.
Ad esempio, nella libreria client Java, i metodi per configurare controllo della contemporaneità sono setParallelPullCount(), setExecutorProvider(), setSystemExecutorProvider() e setChannelProvider().
setParallelPullCount() ti consente di decidere quanti stream aprire. Puoi aprire più stream se il client di sottoscrizione è in grado di gestire più dati di quelli inviati su un singolo stream, ovvero 10 MBps.
setExecutorProvider() ti consente di personalizzare il provider di esecuzione utilizzato per l'elaborazione dei messaggi. Ad esempio, puoi modificare il provider di esecuzione in modo che restituisca un singolo esecutore condiviso con un numero limitato di thread su più client di sottoscrizione. Questa configurazione consente di limitare il numero di thread creati. Il numero totale di thread utilizzati per controllo della contemporaneità dipende dal provider di esecuzione passato nella libreria client e dal numero di pull paralleli.
setSystemExecutorProvider() ti consente di personalizzare il provider di esecuzione utilizzato per la gestione dei lease. In genere, non configuri questo valore a meno che tu non voglia utilizzare lo stesso provider di esecuzione in
setExecutorProvideresetSystemExecutorProvider. Ad esempio, puoi utilizzare lo stesso provider di esecuzione se hai un numero di abbonamenti a bassa velocità effettiva. L'utilizzo dello stesso valore limita il numero di thread nel client.setChannelProvider() ti consente di personalizzare il provider di canali utilizzato per aprire le connessioni a Pub/Sub. In genere, non configuri questo valore a meno che tu non voglia utilizzare lo stesso canale su più client di sottoscrizione. Il riutilizzo di un canale su troppi client potrebbe generare errori
GOAWAYoENHANCE_YOUR_CALM. Se visualizzi questi errori nei log dell'applicazione o nei log di Cloud, crea altri canali.
Esempi di codice per controllo della contemporaneità
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C++ .
Go
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 in 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 all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Java.
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 in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.
Passaggi successivi
Scopri le altre opzioni di consegna che puoi configurare per un abbonamento:
Gestire gli errori dei messaggi con il criterio di ripetizione dei tentativi dell'abbonamento
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre i messaggi di cui è stato eseguito l'ACK in precedenza o eliminare i messaggi