Práticas recomendadas para assinar um tópico do Pub/Sub

Na assinatura, um cliente assinante recebe mensagens de um tópico do Pub/Sub. Veja algumas práticas recomendadas para assinar o Pub/Sub.

Para seguir este documento, você precisa estar familiarizado com o processo de assinatura em um tópico do Pub/Sub e de recebimento de mensagens no cliente assinante.

Se você não estiver familiarizado com o Pub/Sub, consulte um dos guias de início rápido e saiba como executar o Pub/Sub usando o console, a CLI gcloud ou as bibliotecas de cliente.

Escolha a assinatura certa

O Pub/Sub oferece assinaturas padrão, como push e pull. Além das assinaturas padrão, o Pub/Sub também oferece assinaturas de exportação que permitem armazenar mensagens diretamente em um recurso do Google Cloud, sem precisar do Dataflow como intermediário. Por exemplo, as assinaturas do BigQuery armazenam mensagens em uma tabela do BigQuery.

As assinaturas de push são recomendadas para os seguintes cenários:

  • Não é possível incluir nenhum código no seu aplicativo assinante que importe a biblioteca de cliente como uma dependência.

  • O cliente assinante não pode fazer solicitações de saída.

  • Você quer usar a mesma instância para processar mensagens de diferentes tópicos e assinaturas em que o cliente assinante não conhece a lista de assinaturas.

Em casos gerais, recomendamos o uso da biblioteca de cliente de alto nível. Se você estiver usando pull unário, não defina returnImmediately como true. Defini-lo como true afeta negativamente o desempenho de pull. O uso do campo returnImmediately foi descontinuado.

Processe as mensagens antes de reconhecê-las

Por padrão, o Pub/Sub descarta uma mensagem de uma assinatura depois que ela é confirmada. Se você não processar uma mensagem antes de enviar uma confirmação e o processamento falhar, o serviço não a reenviará. A exceção é quando você configura a retenção de mensagens confirmadas ou a retenção de tópicos e executa uma operação de busca.

Se você tiver assinantes de alta latência, talvez seja necessário definir valores personalizados para o controle de fluxo e o gerenciamento de lease.

Configurar o controle de fluxo de assinantes para picos de tráfego temporários

O controle de fluxo no lado do assinante permite que você evite que os assinantes sejam sobrecarregados por picos de tráfego. Isso pode dar tempo para que os mecanismos de escalonamento automático respondam a uma carga aumentada ou pode distribuir o processamento da carga por um período mais longo. O primeiro método economiza latência, enquanto o segundo economiza custos.

Para configurar o controle de fluxo, defina valores adequados para maximum outstanding messages e total outstanding message bytes. Os valores padrão para essas variáveis de controle de fluxo e os nomes das variáveis podem ser diferentes entre as bibliotecas de cliente.

  • Máximo de mensagens pendentes define o número máximo de mensagens entregues ao cliente para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.

  • Total de bytes de mensagens pendentes define o tamanho total máximo de mensagens entregues ao cliente em que o Pub/Sub não recebeu confirmações ou confirmações negativas.

Se o limite de uma dessas opções for ultrapassado, o cliente do assinante não receberá mais mensagens. Esse comportamento continua até que as mensagens que já foram recebidas sejam reconhecidas ou reconhecidas negativamente. Dessa forma, você pode compensar a capacidade com o custo associado à execução de mais assinantes.

Práticas recomendadas para mensagens ordenadas na assinatura

Se você usa a ordem das mensagens, verifique o seguinte:

  • Escolha as assinaturas StreamingPull ou Pull. Para uma assinatura de push, o Pub/Sub aceita apenas uma mensagem pendente para cada chave de pedido por vez. O envio de solicitações push paralelas nesse cenário seria semelhante ao envio de vários lotes de mensagens para a mesma chave de ordenação para receber assinantes simultaneamente. Portanto, as assinaturas de push não são recomendadas para tópicos em que várias mensagens são publicadas com frequência com a mesma chave de ordem ou em que a latência é extremamente importante.

  • Ative a ordem das mensagens na assinatura. No lado do editor, se você enviar mensagens com uma chave de ordenação e estiverem na mesma região, será possível configurar os assinantes para receber essas mensagens em ordem. No lado do assinante, ative a propriedade de ordenação de mensagens apenas para as assinaturas em que você quer receber mensagens ordenadas. Dependendo do status da propriedade, cada assinatura anexada ao tópico pode determinar se precisa de um pedido de entrega sem afetar uma à outra.

  • Confirmar as mensagens em ordem. Ao usar a entrega ordenada, as confirmações de mensagens posteriores não são processadas até que as confirmações de mensagens anteriores sejam processadas por chave de ordem. Por exemplo, se você tiver as mensagens 1, 2 e 3 com a mesma chave de ordem e receber todas elas e confirmar apenas a mensagem 3, o serviço não considerará a mensagem 3 até que as mensagens 1 e 2 também sejam confirmadas. Se as confirmações das mensagens 1 e 2 nunca forem recebidas, as mensagens 1, 2 e 3 serão todas reenviadas.

Resumo das práticas recomendadas

A tabela a seguir resume as práticas recomendadas neste documento:

Tópico Tarefa
Escolher um tipo de assinatura Escolha o tipo de assinatura ideal para sua empresa. Se sua assinatura for compatível com sua assinatura, use também a biblioteca de cliente de alto nível.
Repetir uma mensagem confirmada Processe uma mensagem antes de reconhecê-la. Ou configure para uma operação de busca para não perder mensagens confirmadas.
Controle de fluxo Defina o controle de fluxo nas configurações do assinante para garantir que eles não fiquem sobrecarregados até que o escalonamento automático seja ativado ou o tempo passe.
Como ordenar mensagens Ao usar mensagens ordenadas, escolha StreamingPull ou Pull, ative a ordenação das mensagens na assinatura e confirme as mensagens na ordem.

A seguir