Por vezes, os pipelines de dados registam picos no tráfego publicado. Os picos de tráfego podem sobrecarregar os subscritores, a menos que esteja preparado para isso. Uma solução simples para evitar picos de tráfego é aumentar dinamicamente os recursos de subscrição do Pub/Sub para processar mais mensagens. No entanto, esta solução pode aumentar os custos ou não funcionar instantaneamente. Por exemplo, pode precisar de muitas VMs.
O controlo de fluxo do lado do subscritor permite que o subscritor regule a taxa a que as mensagens são carregadas. Assim, o controlo de fluxo processa picos de tráfego sem aumentar os custos ou até o subscritor ser dimensionado.
O controlo de fluxo é uma funcionalidade disponível na biblioteca cliente de alto nível do Pub/Sub. Também pode implementar a sua própria programação de controlo de fluxo quando estiver a usar uma biblioteca de cliente de baixo nível.
A necessidade de controlo de fluxo indica que as mensagens estão a ser publicadas a uma taxa superior à da respetiva utilização. Se este cenário for um estado persistente, em vez de um pico transitório no volume de mensagens, considere aumentar o número de instâncias de cliente subscritor.
Configuração do controlo do fluxo
O controlo de fluxo permite-lhe configurar o número máximo de bytes atribuídos a pedidos pendentes e o número máximo de mensagens pendentes permitidas. Defina estes limites de acordo com a capacidade de débito das suas máquinas cliente.
Os valores predefinidos das variáveis de controlo de fluxo e os nomes das variáveis podem diferir entre as bibliotecas de cliente. Por exemplo, na biblioteca cliente Java, as seguintes variáveis configuram o controlo 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 para setMaxOutstandingElementCount()
ou setMaxOutstandingRequestBytes()
for ultrapassado, o cliente subscritor não extrai mais mensagens. Este comportamento continua até que as mensagens já extraídas sejam confirmadas ou confirmadas negativamente.
Deste modo, podemos alinhar o débito com o custo associado à execução de mais subscritores.
Exemplos de código para controlo do fluxo
Para controlar a taxa à qual o cliente subscritor recebe mensagens, use as funcionalidades de controlo de fluxo do subscritor. Estas funcionalidades de controlo de fluxo são ilustradas nos seguintes exemplos:
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.
C#
Antes de experimentar este exemplo, siga as instruções de configuração do C# em 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.
Node.js
Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.
Node.js
Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.
Python
Antes de experimentar este exemplo, siga as instruções de configuração do Python em Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python 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