O controlo de simultaneidade é uma funcionalidade disponível na biblioteca de cliente de alto nível do Pub/Sub. Também pode implementar o seu próprio controlo de simultaneidade quando usa uma biblioteca de baixo nível.
O suporte para o controlo de simultaneidade depende da linguagem de programação da biblioteca cliente. Para implementações de idiomas que suportam threads paralelos, como C++, Go e Java, as bibliotecas cliente fazem uma escolha predefinida para o número de threads.
Esta escolha pode não ser a ideal para a sua aplicação. Por exemplo, se a sua aplicação de subscrição não estiver a acompanhar o volume de mensagens recebidas e não estiver limitada pela CPU, tem de aumentar o número de threads. Para operações de processamento de mensagens com utilização intensiva da CPU, pode ser adequado reduzir o número de threads.
Esta página explica o conceito de controlo de concorrência e como configurar a funcionalidade para os seus clientes subscritores. Para configurar os clientes de publicadores para o controlo de simultaneidade, consulte o artigo Controlo de simultaneidade.
Configurações de controlo de simultaneidade
Os valores predefinidos das variáveis de controlo de simultaneidade e os nomes das variáveis podem diferir entre as bibliotecas de cliente. Para mais informações, consulte a
documentação de referência da API.
Por exemplo, na biblioteca cliente Java, os métodos para configurar o controlo de simultaneidade são setParallelPullCount()
, setExecutorProvider()
, setSystemExecutorProvider()
e setChannelProvider()
.
setParallelPullCount() permite-lhe decidir quantas streams abrir. Pode abrir mais streams se o seu cliente subscritor conseguir processar mais dados do que os enviados numa única stream, que é de 10 MBps.
setExecutorProvider() permite-lhe personalizar o fornecedor do executor usado para o processamento de mensagens. Por exemplo, pode alterar o fornecedor do executor para um que devolva um executor único e partilhado com um número limitado de threads em vários clientes subscritores. Esta configuração ajuda a limitar o número de threads criados. O número total de threads usados para o controlo de concorrência depende do fornecedor de executor transmitido na biblioteca de cliente e da quantidade de obtenção paralela.
setSystemExecutorProvider() permite-lhe personalizar o fornecedor de executor usado para a gestão de concessões. Normalmente, não configura este valor, a menos que queira usar o mesmo fornecedor de executor em
setExecutorProvider
esetSystemExecutorProvider
. Por exemplo, pode usar o mesmo fornecedor de executor se tiver várias subscrições de baixo débito. A utilização do mesmo valor limita o número de linhas de execução no cliente.setChannelProvider() permite-lhe personalizar o fornecedor do canal usado para abrir ligações ao Pub/Sub. Normalmente, não configura este valor, a menos que queira usar o mesmo canal em vários clientes subscritores. A reutilização de um canal em demasiados clientes pode resultar em erros
GOAWAY
ouENHANCE_YOUR_CALM
. Se vir estes erros nos registos da sua aplicação ou nos registos da nuvem, crie mais canais.
Exemplos de código para o controlo de simultaneidade
C++
Antes de experimentar este exemplo, siga as instruções de configuração do C++ no artigo Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C++ do Pub/Sub.
Ir
O exemplo seguinte usa a versão principal da biblioteca de cliente Go Pub/Sub (v2). Se ainda estiver a usar a biblioteca v1, consulte o guia de migração para a v2. Para ver uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Go em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Go do Pub/Sub.
Java
Antes de experimentar este exemplo, siga as instruções de configuração do Java no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Java do Pub/Sub.
Ruby
O exemplo seguinte usa a biblioteca cliente Ruby Pub/Sub v3. Se ainda estiver a usar a biblioteca v2, consulte o guia de migração para a v3. Para ver uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Ruby em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
O que se segue?
Leia acerca das outras opções de fornecimento que pode configurar para uma subscrição:
Faça a gestão de falhas de mensagens com a política de repetição de subscrições
Encaminhe mensagens não entregues para um tópico de mensagens não entregues
Repita mensagens com confirmação anterior ou elimine mensagens