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 saiba como executar o Pub/Sub usando o console, a Google Cloud CLI 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 umGoogle Cloud recurso, sem exigir o 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 no aplicativo do assinante nenhum código 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 pull unário, não defina returnImmediately
como true
. Definir como true
afeta negativamente a performance de extração.
O campo returnImmediately
foi descontinuado.
Para comparar todos os tipos de assinatura e escolher o que melhor se adapta às necessidades da sua empresa, consulte a tabela de comparação de assinaturas do Pub/Sub.
Para saber mais sobre os benefícios de uma assinatura de exportação, consulte Quando usar uma assinatura de exportação.
Processar mensagens antes de confirmar o recebimento
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 um reconhecimento e o processamento falhar, o serviço não reenviará a mensagem. A exceção é quando você configurou a retenção de mensagens confirmadas ou de tópicos e realiza uma operação de busca.
Se você tiver assinantes com alta latência, talvez seja necessário definir valores personalizados para controle de fluxo e gerenciamento de concessão.
Configurar o controle de fluxo de assinantes para picos de tráfego transitórios
O controle de fluxo no lado do assinante evita que eles 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 dessas variáveis de controle de fluxo e os nomes delas podem variar entre as bibliotecas de cliente.
O número 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 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 assinante não extrairá mais mensagens. Esse comportamento continua até que as mensagens já extraídas sejam confirmadas ou negativamente confirmadas. Dessa forma, você pode fazer um trade-off entre a capacidade de processamento e o custo associado à execução de mais assinantes.
Lidar com entregas duplicadas
Por padrão, o Pub/Sub oferece a entrega de mensagens pelo menos uma vez aos assinantes. Isso significa que as mensagens podem ser entregues várias vezes, mesmo que tenham sido confirmadas. As seções a seguir abordam como lidar com cenários comuns de nova entrega.
Nova entrega consistente de muitas mensagens
Se você estiver enfrentando casos em que muitas mensagens são sempre reenviadas, seus assinantes estão sobrecarregados ou não estão confirmando as mensagens antes do prazo expirar.
Se você estiver usando uma assinatura de extração, talvez seja necessário definir valores personalizados para controle de fluxo ou aumentar os períodos de extensão de concessão usando o gerenciamento de concessão.
Se você estiver usando assinaturas de push, talvez seja necessário aumentar a configuração do prazo de confirmação. Você também pode seguir as práticas recomendadas sobre como manter uma assinatura em dia.
Nova entrega ocasional de mensagens
Quando as mensagens são reenviadas antes do prazo de confirmação ou depois de serem confirmadas em alguns segundos, o Pub/Sub está funcionando como esperado. Esses picos de reenvio não devem ocorrer com frequência, mas, quando acontecem, é provável que ocorram em várias mensagens simultaneamente. Seu sistema precisa ser criado para tolerar esses duplicados ocasionais.
Reenvio repetido de algumas mensagens
Quando você notar que um pequeno número de mensagens foi entregue várias vezes, primeiro confirme que você está reconhecendo essas mensagens. Se não for o caso, descubra por que o assinante não está processando as mensagens corretamente. Convém configurar um tópico de mensagens inativas para evitar novas reentregas. Se você estiver confirmando a mensagem, o Pub/Sub ainda poderá estar operando conforme o esperado. Embora seja muito raro, ainda é possível que um pequeno número de mensagens seja entregue várias vezes se houver interrupções internas na rede ou no hardware. O serviço tenta se recuperar automaticamente nesses casos, mas pode levar vários minutos para que as correções sejam ativadas.
Seu sistema precisa ser tolerante a novas entregas. Para reduzir essa probabilidade, processe e confirme o recebimento das mensagens o mais rápido possível.
Se o aplicativo não tolerar duplicatas, ative a entrega exatamente uma vez. Lembre-se de que esse recurso só está disponível para assinaturas pull e resulta em uma latência maior de publicação para assinatura. Avalie se a troca de maior latência é aceitável para seu caso de uso antes de ativar esse recurso.
Práticas recomendadas para mensagens ordenadas na inscrição
Se você usar a ordenação de mensagens, verifique o seguinte:
Escolha entre assinaturas StreamingPull ou Pull. Para uma assinatura de push, o Pub/Sub aceita apenas uma mensagem pendente por chave de ordenação por vez. Enviar solicitações push paralelas em um cenário assim seria semelhante a enviar vários lotes de mensagens para a mesma chave de ordenação para extrair assinantes simultaneamente. Portanto, as assinaturas por 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 ordenação de mensagens na assinatura. No lado do editor, se você enviar mensagens com uma chave de ordem 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 precisa de entrega ordenada sem afetar as outras.
Confirmar 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, receber todas elas 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 os reconhecimentos das mensagens 1 e 2 nunca forem recebidos, 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 certo para as necessidades da sua empresa. Se sua assinatura permitir, use também a biblioteca de cliente de alto nível. |
Reproduzir uma mensagem confirmada | Processe uma mensagem antes de confirmar o recebimento. Ou configure para 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 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 de mensagens na assinatura e confirme as mensagens em ordem. |
A seguir
Práticas recomendadas para publicar em um tópico do Pub/Sub.
Práticas recomendadas para usar métricas do Pub/Sub como um indicador de escalonamento.