Às vezes, Data pipelines sofrem picos no tráfego publicado. Os picos de tráfego podem sobrecarregar os inscritos, a menos que você se prepare 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 várias VMs.
O controle de fluxo do assinante permite que ele regule a taxa em que as mensagens são ingeridas. Assim, o controle de fluxo lida com picos de tráfego sem aumentar os custos ou até que o assinante seja escalonado verticalmente.
O controle de fluxo é um recurso disponível na biblioteca de cliente de alto nível do Pub/Sub. Você também pode implementar sua própria programação de controle de fluxo quando estiver usando uma biblioteca de cliente de baixo nível.
A necessidade do controle de fluxo indica que as mensagens estão sendo publicadas a uma taxa maior do que estão sendo consumidas. Se esse cenário for um estado permanente, em vez de um pico temporário no volume de mensagens, considere aumentar o número de instâncias do cliente assinante.
Configuração do controle de fluxo
O controle de fluxo permite 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 para as variáveis de controle de fluxo e os nomes delas podem ser diferentes nas bibliotecas de cliente. Por exemplo, na biblioteca de cliente Java, as variáveis a seguir configuram o controle de fluxo:
setMaxOutOngoingElementCount(). Define o número máximo de mensagens em que o Pub/Sub não recebeu confirmações ou confirmações negativas.
setMaxOutOngoingRequestBytes(). Define o tamanho máximo de mensagens para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.
Se o limite de setMaxOutstandingElementCount()
ou
setMaxOutstandingRequestBytes()
for ultrapassado, o cliente do assinante
não receberá mais mensagens. Esse comportamento continua até que as mensagens
que já foram extraídas sejam reconhecidas ou reconhecidas negativamente.
Assim, é possível alinhar a capacidade com o custo associado à execução de mais assinantes.
Amostras de código para controle de fluxo
Para controlar a frequência em que o cliente assinante recebe mensagens, use os recursos de controle de fluxo do assinante. Esses recursos de controle de fluxo são ilustrados nos exemplos 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
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
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 podem ser configuradas para uma assinatura:
Lidar com falhas de mensagens com a política de nova tentativa de assinatura
Encaminhar mensagens não entregues para um tópico de mensagens inativas
Aumentar o tempo de confirmação com o gerenciamento de lease