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 para o 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 limitado à CPU, aumente a contagem de linhas de execução. Para operações de processamento de mensagens intensivas da CPU, reduzir o número de linhas de execução pode ser apropriado.
Esta página explica o conceito de controle de simultaneidade e como configurar o recurso para clientes de assinantes. Para configurar os clientes de 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 delas
podem ser diferentes nas 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 que você decida quantos streams abrir. É possível abrir mais streams se o cliente do assinante puder processar mais dados do que os que são enviados em um único stream, que é de 10 MBps.
setExecutorProvider() permite 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 de assinante. Essa configuração ajuda a limitar o número de linhas de execução criadas. O número total de linhas de execução usadas para o 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 leases. Normalmente, você não configura esse valor, a menos que queira usar o mesmo provedor de executor em
setExecutorProvider
esetSystemExecutorProvider
. Por exemplo, é possível usar o mesmo provedor de executor se você tiver várias assinaturas de baixa capacidade. O uso do mesmo valor limita o número de linhas de execução no cliente.setChannelProvider() permite personalizar o provedor de canal 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. A reutilização de um canal em muitos clientes pode resultar em erros
GOAWAY
ouENHANCE_YOUR_CALM
. Se você encontrar esses erros nos registros do seu 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
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
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 exibição que podem ser configuradas para uma assinatura:
Lidar com falhas de mensagens com a política de repetição de assinatura
Encaminhar mensagens não entregues para um tópico de mensagens inativas
Reproduzir mensagens confirmadas anteriormente ou limpar mensagens