O controle de simultaneidade é um recurso disponível na biblioteca de cliente de alto nível do Pub/Sub. Também é possível implementar seu próprio controle de simultaneidade ao usar uma biblioteca de baixo nível.
O suporte ao controle de simultaneidade depende da linguagem de programação da biblioteca de cliente. Para implementações de linguagem que aceitam linhas de execução paralelas, como C++, Go e Java, as bibliotecas de cliente fazem uma escolha padrão do número de linhas de execução.
Essa escolha pode não ser ideal para o aplicativo. Por exemplo, se o aplicativo assinante não estiver acompanhando o volume de mensagens recebidas e não estiver ligado à CPU, aumente a contagem de linhas de execução. Para operações de processamento de mensagens intensivas da CPU, diminua o número de linhas de execução.
Nesta página, explicamos o conceito de controle de simultaneidade e como configurar o recurso para os clientes assinantes. Para configurar seus clientes editores para controle de simultaneidade, consulte Controle de simultaneidade.
Configurações de controle de simultaneidade
Os valores padrão das variáveis de controle de simultaneidade e os nomes das variáveis podem variar entre as bibliotecas de cliente. Para mais informações, consulte a
documentação de referência da API.
Por exemplo, na biblioteca de cliente Java, os métodos para
configurar o controle de simultaneidade são setParallelPullCount()
,
setExecutorProvider()
, setSystemExecutorProvider()
e
setChannelProvider()
.
setParallelPullCount() permite decidir quantos streams abrir. É possível abrir mais streams se o cliente assinante puder processar mais dados do que são enviados em um único stream, que é de 10 MBps.
Com setExecutorProvider(), é possível personalizar o provedor de executor usado para processar mensagens. Por exemplo, você pode mudar o provedor de executor para um que retorne um único executor compartilhado com um número limitado de linhas de execução em vários clientes assinantes. Essa configuração ajuda a limitar o número de threads criadas. O número total de linhas de execução usadas para controle de simultaneidade depende do provedor de executor transmitido na biblioteca de cliente e da contagem de extração paralela.
setSystemExecutorProvider() permite personalizar o provedor de executor usado para gerenciamento de concessão. Normalmente, você não configura esse valor, a menos que queira usar o mesmo provedor de executor em
setExecutorProvider
esetSystemExecutorProvider
. Por exemplo, você pode usar o mesmo provedor de executor se tiver várias assinaturas de baixa taxa de transferência. Usar o mesmo valor limita o número de linhas de execução no cliente.setChannelProvider() permite personalizar o provedor de canais usado para abrir conexões com o Pub/Sub. Normalmente, você não configura esse valor, a menos que queira usar o mesmo canal em vários clientes assinantes. Reutilizar um canal em muitos clientes pode resultar em erros
GOAWAY
ouENHANCE_YOUR_CALM
. Se você encontrar esses erros nos registros do aplicativo ou no Cloud Logging, crie mais canais.
Exemplos de código para controle de simultaneidade
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C++.
Go
O exemplo a seguir usa a versão principal da biblioteca de cliente do Go Pub/Sub (v2). Se você ainda estiver usando a biblioteca v1, consulte o guia de migração para a v2. Para conferir uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Ruby
O exemplo a seguir usa a biblioteca de cliente do Ruby Pub/Sub v3. Se você ainda estiver usando a biblioteca v2, consulte o guia de migração para a v3. Para conferir uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
A seguir
Leia sobre as outras opções de entrega que você pode configurar para uma assinatura:
Lidar com falhas de mensagens usando a política de novas tentativas de assinatura
Encaminhar mensagens não entregues para um tópico de mensagens inativas
Repetir mensagens confirmadas anteriormente ou limpar mensagens
Estender o tempo de confirmação com o gerenciamento de concessões