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

Ao assinar, o cliente recebe mensagens de um tópico do Pub/Sub. Confira algumas práticas recomendadas para se inscrever no Pub/Sub.

Este documento pressupõe que você já conhece o processo de assinatura de um tópico do Pub/Sub e de recebimento de mensagens no cliente assinante.

Se você não conhece o Pub/Sub, consulte um dos guias de início rápido e aprenda a executar o Pub/Sub usando o console, a CLI do Google Cloud ou as bibliotecas de cliente.

Escolher 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 push são recomendadas para os seguintes cenários:

  • Não é possível incluir nenhum código no aplicativo de 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.

Para casos gerais, recomendamos usar a biblioteca de cliente de alto nível. Se você estiver usando o pull unário, não defina returnImmediately como true. Definir como true afeta negativamente a performance de pull. O campo returnImmediately foi descontinuado.

Processar mensagens antes de confirmar

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 vai reenviar a mensagem. A exceção é quando você configurou a retenção de mensagens confirmadas ou a retenção de tópicos e realiza uma operação de busca.

Se você tiver assinantes com latência alta, talvez seja necessário definir valores personalizados para o controle de fluxo e a gestão de leasing.

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

O controle de fluxo no lado do assinante permite evitar que os assinantes sejam sobrecarregados por picos de tráfego. Isso pode permitir que os mecanismos de escalonamento automático respondam a uma carga maior ou 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 apropriados para maximum outstanding messages e total outstanding message bytes. Os valores padrão dessas variáveis de controle de fluxo e os nomes delas podem variar entre as bibliotecas de cliente.

  • Mensagens pendentes máximas 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 enviadas ao cliente para as quais 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 vai buscar mais mensagens. Esse comportamento continua até que as mensagens que já foram extraidas sejam confirmadas ou negadas. Dessa forma, é possível trocar o throughput pelo custo associado à execução de mais assinantes.

Práticas recomendadas para mensagens ordenadas em assinaturas

Se você usa a ordenação de mensagens, confira o seguinte:

  • Escolha as assinaturas StreamingPull ou Pull. Para uma assinatura de push, o Pub/Sub oferece suporte a apenas uma mensagem pendente para cada chave de ordenação por vez. Enviar solicitações push paralelas nesse cenário seria semelhante a enviar vários lotes de mensagens para a mesma chave de ordenação para puxar assinantes simultaneamente. Portanto, as assinaturas 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 ordenação ou em que a latência é extremamente importante.

  • Ative a ordenação de mensagens na assinatura. No lado do editor, se você enviar mensagens com uma chave de ordenação e na mesma região, poderá 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 elas precisam de entrega ordenada sem afetar umas às outras.

  • 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 ordenação. Por exemplo, se você tiver as mensagens 1, 2 e 3 com a mesma chave de ordenação e receber todas e confirmar apenas a mensagem 3, o serviço não vai considerar a mensagem 3 como confirmada até que as mensagens 1 e 2 também sejam confirmadas. Se as confirmações das mensagens 1 e 2 não forem recebidas, as mensagens 1, 2 e 3 serão 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 as necessidades da sua empresa. Se a assinatura oferecer suporte, use também a biblioteca de cliente de alto nível.
Reproduzir uma mensagem confirmada Processe uma mensagem antes de confirmar. Ou configure uma operação de busca para não perder mensagens confirmadas.
Controle de fluxo Configure o controle de fluxo nas configurações do assinante para garantir que os assinantes não sejam sobrecarregados até que o escalonamento automático seja ativado ou até que o tempo passe.
Como ordenar mensagens Ao usar mensagens ordenadas, escolha "StreamingPull" ou "Pull", ative a ordenação de mensagens na assinatura e confirme as mensagens na ordem.

A seguir