Il controllo della concorrenza è una funzionalità disponibile nella libreria client di alto livello Pub/Sub. Puoi anche implementare il tuo controllo della contemporaneità quando utilizzi una libreria a basso livello.
Il supporto del controllo della contemporaneità dipende dal linguaggio di programmazione della libreria client. Per le implementazioni dei linguaggi che supportano thread paralleli, come C++, Go e Java, le librerie client fanno 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 abbonamento non è al passo con il volume di messaggi in entrata e non è vincolata alla CPU, devi aumentare il numero di thread. Per operazioni di elaborazione dei messaggi che richiedono un'elevata intensità di risorse della CPU, potrebbe essere opportuno ridurre il numero di thread.
Questa pagina spiega il concetto di controllo della contemporaneità e come configurare la funzionalità per i clienti sottoscrittori. Per configurare i client publisher per controllo della contemporaneità, consulta Controllo della concorrenza.
Configurazioni di controllo della concorrenza
I valori predefiniti per le variabili di controllo della contemporaneità e i nomi delle variabili possono variare in base alle librerie client. Per ulteriori informazioni, 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 sottoscrittore è in grado di gestire più dati di quelli inviati su un singolo stream, ovvero 10 MB/s.
setExecutorProvider() ti consente di personalizzare il provider dell'executor utilizzato per elaborare i messaggi. Ad esempio, puoi modificare il provider dell'executor in modo che restituisca un singolo executor condiviso con un numero limitato di thread su più client di abbonati. Questa configurazione consente di limitare il numero di thread creati. Il numero totale di thread utilizzati per controllo della contemporaneità dipende dal provider dell'executor passato nella libreria client e dal numero di pull paralleli.
setSystemExecutorProvider() ti consente di personalizzare il provider dell'executor usato per la gestione dei leasing. In genere, non configuri questo valore, a meno che non voglia utilizzare lo stesso provider di esecuzioni in
setExecutorProvider
esetSystemExecutorProvider
. Ad esempio, puoi utilizzare lo stesso fornitore di agenti se hai un numero di abbonamenti a basso throughput. 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 abbonati. Il riutilizzo di un canale su troppi clienti potrebbe comportare errori
GOAWAY
oENHANCE_YOUR_CALM
. Se vedi questi errori nei log della tua applicazione o in Cloud Logs, crea altri canali.
Esempi di codice per controllo della contemporaneità
C++
Prima di provare questo esempio, segui le istruzioni di configurazione C++ riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella 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 riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Passaggi successivi
Scopri le altre opzioni di pubblicazione che puoi configurare per un abbonamento:
Gestire gli errori relativi ai messaggi con il criterio di ripetizione dell'abbonamento
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre i messaggi per i quali è stato ricevuto l'acknowledgement o eliminare i messaggi