Às vezes, Data pipelines têm picos no tráfego publicado. Os picos de tráfego podem sobrecarregar os assinantes, a menos que você esteja preparado para isso. Uma solução simples para evitar picos de tráfego é aumentar dinamicamente os recursos do assinante do Pub/Sub para processar mais mensagens. No entanto, essa solução pode aumentar os custos ou não funcionar instantaneamente. Por exemplo, talvez você precise de muitas VMs.
O controle de fluxo no lado do assinante permite que ele regule a taxa de ingestão de mensagens. Assim, o controle de fluxo lida com picos de tráfego sem aumentar os custos ou até que o assinante seja escalonado.
O controle de fluxo é um recurso disponível na biblioteca de cliente de alto nível do Pub/Sub. Também é possível implementar sua própria programação de controle de fluxo ao usar uma biblioteca de cliente de baixo nível.
A necessidade do controle de fluxo indica que as mensagens são publicadas com uma taxa maior do que são consumidas. Se esse cenário for um estado constante, em vez de um pico transitório no volume de mensagens, pense em aumentar o número de instâncias do cliente assinante.
Configuração do controle de fluxo
Com o controle de fluxo, é possível configurar o número máximo de bytes alocados para solicitações pendentes e o número máximo de mensagens pendentes permitidas. Defina esses limites de acordo com a capacidade dos computadores clientes.
Os valores padrão das variáveis de controle de fluxo e os nomes das variáveis podem ser diferentes em cada biblioteca de cliente. Por exemplo, na biblioteca de cliente Java, as seguintes variáveis configuram o controle de fluxo:
setMaxOutstandingElementCount(): define o número máximo de mensagens para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.
setMaxOutstandingRequestBytes(): define o tamanho máximo das mensagens para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.
Se o limite de setMaxOutstandingElementCount()
ou
setMaxOutstandingRequestBytes()
for excedido, o cliente assinante
não vai extrair mais mensagens. Esse comportamento continua até que as mensagens
já extraídas sejam confirmadas ou negativamente confirmadas.
Assim, podemos alinhar a capacidade ao custo associado à execução de mais assinantes.
Exemplos de código para controle de fluxo
Para controlar a taxa com que o cliente assinante recebe mensagens, use os recursos de controle de fluxo do assinante. Esses recursos de controle de fluxo são ilustrados nas amostras a seguir:
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++.
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.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js 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 Node.js.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js 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 Node.js.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python 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 Python.
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