Il controllo della concorrenza è una funzionalità disponibile nella libreria client di alto livello di Pub/Sub. 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 l'applicazione di sottoscrizione 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 uso intensivo della CPU, la riduzione del numero di thread potrebbe essere appropriata.
Questa pagina spiega il concetto di controllo della contemporaneità e come configurare la funzionalità per i client abbonati. Per configurare i client publisher per controllo della contemporaneità, consulta la sezione 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 abbonato è in grado di gestire più dati di quelli inviati su un singolo stream, ovvero 10 MBps.
setExecutorProvider() consente di personalizzare il provider di executor utilizzato per l'elaborazione dei messaggi. Ad esempio, puoi modificare il provider dell'executor in modo che restituisca un singolo executor condiviso con un numero limitato di thread in più client abbonati. Questa configurazione consente di limitare il numero di thread creati. Il numero totale di thread utilizzati per controllo della contemporaneità dipende dal provider di esecutore passato nella libreria client e dal conteggio di pull paralleli.
setSystemExecutorProvider() consente di personalizzare il provider di executor utilizzato per la gestione dei lease. In genere, non configuri questo valore a meno che non vuoi utilizzare lo stesso provider di esecuzione in
setExecutorProvider
esetSystemExecutorProvider
. Ad esempio, puoi utilizzare lo stesso fornitore di esecutori 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 fornitore 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 abbonati. Il riutilizzo di un canale in troppi clienti potrebbe causare errori
GOAWAY
oENHANCE_YOUR_CALM
. Se visualizzi 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 di C++ nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Vai
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 ritirati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella 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 nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java di Pub/Sub.
Ruby
Il seguente esempio 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 ritirati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella 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 pubblicazione che puoi configurare per un abbonamento:
Gestire gli errori dei messaggi con il criterio di nuovi tentativi di abbonamento
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre i messaggi riconosciuti in precedenza o eliminarli
Estendere il tempo di riconoscimento con la gestione dei contratti di locazione