Este documento pressupõe que já conhece o processo de subscrever um tópico do Pub/Sub e receber mensagens no seu cliente subscritor.
Se não conhece o Pub/Sub, consulte um dos guias de início rápido e saiba como executar o Pub/Sub através da consola, da CLI do Google Cloud ou das bibliotecas de cliente.
Escolha a subscrição certa
O Pub/Sub oferece subscrições padrão, como subscrições push e pull. Além das subscrições padrão, o Pub/Sub também oferece subscrições de exportação que lhe permitem armazenar mensagens diretamente numGoogle Cloud recurso, sem precisar do Dataflow como intermediário. Por exemplo, as subscrições do BigQuery armazenam mensagens numa tabela do BigQuery.
As subscrições push são recomendadas para os seguintes cenários:
Não pode incluir nenhum código na sua aplicação de subscrição que importe a biblioteca de cliente como uma dependência.
O cliente subscritor não pode fazer pedidos de saída.
Quer usar a mesma instância para processar mensagens de diferentes tópicos e subscrições em que o cliente subscritor não conhece a lista de subscrições.
Para casos gerais, recomendamos a utilização da biblioteca de cliente de nível superior. Se estiver a usar a extração unária, não defina returnImmediately
como true
. Definir como true
afeta negativamente o desempenho de obtenção.
O campo returnImmediately
foi descontinuado.
Para comparar todos os tipos de subscrição e escolher o que melhor se adapta às necessidades da sua empresa, consulte a tabela de comparação de subscrições do Pub/Sub.
Para saber mais sobre as vantagens de uma subscrição de exportação, consulte o artigo Quando usar uma subscrição de exportação.
Processar mensagens antes de as confirmar
Por predefinição, o Pub/Sub rejeita uma mensagem de uma subscrição depois de a mensagem ser confirmada. Se não processar uma mensagem antes de enviar uma confirmação e o processamento falhar, o serviço não volta a enviar a mensagem. A exceção ocorre quando configurou a retenção de mensagens confirmadas ou a retenção de tópicos e executa uma operação de procura.
Se tiver subscritores com latência elevada, pode ter de definir valores personalizados para o controlo de fluxo e a gestão de concessões.
Configure o controlo do fluxo de subscritores para picos de tráfego transitórios
O controlo de fluxo do lado do subscritor permite-lhe evitar que os subscritores fiquem sobrecarregados com picos de tráfego. Pode dar tempo aos mecanismos de dimensionamento automático para responderem a um aumento da carga ou pode distribuir o processamento da carga por um período mais longo. O primeiro método poupa latência, enquanto o segundo poupa custos.
Para configurar o controlo de fluxo, tem de definir valores adequados para maximum outstanding messages
e total outstanding message bytes
. Os valores predefinidos destas variáveis de controlo de fluxo e os nomes das variáveis podem diferir 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 das mensagens enviadas ao cliente para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.
Se o limite de uma destas opções 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. Desta forma, pode equilibrar o débito com o custo associado à execução de mais subscrições.
Lide com entregas duplicadas
Por predefinição, o Pub/Sub oferece o fornecimento de mensagens pelo menos uma vez aos subscritores. Isto significa que as mensagens podem ser entregues várias vezes, mesmo que tenham sido confirmadas. As secções seguintes abordam como resolver cenários de reenvio comuns.
Reenvio consistente de muitas mensagens
Se estiver a ter casos em que muitas mensagens são sempre reenviadas, significa que os seus subscritores estão sobrecarregados ou não estão a confirmar as mensagens antes de o prazo expirar.
Se estiver a usar uma subscrição de obtenção, pode ter de definir valores personalizados para os valores de controlo de fluxo ou aumentar os períodos de extensão do arrendamento usando a gestão de arrendamentos.
Se estiver a usar subscrições push, pode ter de aumentar a definição do prazo de confirmação. Também pode seguir as práticas recomendadas sobre como manter uma subscrição saudável.
Reentrega ocasional de mensagens
Quando vê que as mensagens são reenviadas antes do prazo de confirmação ou depois de as mensagens serem confirmadas no prazo de alguns segundos, o Pub/Sub está a funcionar como esperado. Não deve ver estes picos de reenvio com frequência, mas quando ocorrem reenvios, é provável que ocorram em várias mensagens em simultâneo. O seu sistema tem de ser criado para tolerar estes duplicados ocasionais.
Reenvio repetido de algumas mensagens
Quando vir um pequeno número de mensagens entregues várias vezes, confirme primeiro que as está a acusar. Se não for o caso, descubra por que motivo o seu subscritor não está a processar as mensagens corretamente. É recomendável configurar um tópico de mensagens não entregues para evitar a reentrega adicional. Se estiver a confirmar a mensagem, o Pub/Sub pode continuar a funcionar como 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 corrigir-se automaticamente nestes casos, mas a ativação das soluções pode demorar vários minutos.
O seu sistema tem de ser tolerante a reenvios. Pode reduzir a probabilidade de as mensagens serem marcadas como spam garantindo que as processa e confirma o mais rapidamente possível.
Se a sua aplicação não tolerar duplicados, pode ativar a entrega exatamente uma vez. Lembre-se de que esta funcionalidade só está disponível para subscrições de obtenção e que também resulta numa latência de publicação para subscrição mais elevada. Avalie se o compromisso de uma latência mais elevada é aceitável para o seu exemplo de utilização antes de ativar esta funcionalidade.
Práticas recomendadas para mensagens ordenadas na subscrição
Se usar a ordenação de mensagens, certifique-se do seguinte:
Escolha subscrições StreamingPull ou Pull. Para uma subscrição push, o Pub/Sub suporta apenas uma mensagem pendente para cada chave de ordenação de cada vez. O envio de pedidos push paralelos num cenário deste tipo seria semelhante ao envio de vários lotes de mensagens para a mesma chave de ordenação para obter subscritores em simultâneo. Por conseguinte, as subscrições push não são recomendadas para tópicos em que são publicadas frequentemente várias mensagens com a mesma chave de ordenação ou em que a latência é extremamente importante.
Ative a ordenação de mensagens na subscrição. Do lado do publicador, se enviar mensagens com uma chave de ordenação e na mesma região, pode configurar os subscritores para receberem essas mensagens por ordem. Do lado do subscritor, ative a propriedade de ordenação de mensagens apenas para as subscrições para as quais quer receber mensagens ordenadas. Consoante o estado da propriedade, cada subscrição associada ao tópico pode determinar se precisa de entrega ordenada sem afetar as outras.
Reconheça as mensagens pela ordem. Quando usa a entrega ordenada, os reconhecimentos de mensagens posteriores não são processados até que os reconhecimentos de mensagens anteriores sejam processados por chave de ordenação. Por exemplo, se tiver as mensagens 1, 2 e 3 com a mesma chave de ordenação e as receber todas, e apenas acusar a receção da mensagem 3, o serviço não considera a mensagem 3 como acusada até que as mensagens 1 e 2 também sejam acusadas. Se os reconhecimentos das mensagens 1 e 2 nunca forem recebidos, as mensagens 1, 2 e 3 são todas reenviadas.
Resumo das práticas recomendadas
A tabela seguinte resume as práticas recomendadas neste documento:
Tópico | Tarefa |
---|---|
Escolha um tipo de subscrição | Escolha o tipo de subscrição certo para as necessidades da sua empresa. Se suportado pela sua subscrição, use também a biblioteca cliente de nível elevado. |
Replay an acknowledged message | Processar uma mensagem antes de a confirmar. Em alternativa, configure uma operação de procura para não perder as mensagens reconhecidas. |
Controlo do fluxo | Configure o controlo de fluxo nas definições do subscritor para garantir que os subscritores não ficam sobrecarregados até que o ajuste de escala automático seja ativado ou o tempo passe. |
Ordenar mensagens | Quando usar mensagens ordenadas, escolha StreamingPull ou Pull, ative a ordenação de mensagens na subscrição e confirme as mensagens por ordem. |