Quando uma mensagem é entregue a um assinante de extração, ele precisa processar e confirmar (ack) a mensagem dentro do prazo de confirmação. Caso contrário, o assinante precisa estender o prazo com uma chamada para modificar o prazo de confirmação.
As bibliotecas de cliente de alto nível do Pub/Sub oferecem o gerenciamento de concessão como um recurso que estende automaticamente o prazo de uma mensagem que ainda não foi confirmada. Por padrão, as bibliotecas de cliente podem estender o prazo para uma hora emitindo solicitações periódicas modifyAckDeadline. As bibliotecas de cliente de alto nível para Python, Go e Java usam o 99º percentil de atraso de confirmação para determinar a duração de cada extensão.
O gerenciamento de concessão permite que você tenha um controle mais granular sobre o prazo de confirmação das mensagens em comparação com a configuração da propriedade no nível da assinatura. Se você estiver usando apenas o prazo de confirmação no nível da assinatura, será necessário equilibrar a compensação entre um valor baixo e um valor alto. Um valor baixo aumenta a probabilidade de duplicados, e um valor alto atrasa a nova entrega de mensagens com falha. Determinar o valor certo pode ser difícil, especialmente quando o tempo de processamento esperado para diferentes mensagens varia muito.
Para mais informações sobre as propriedades de uma assinatura, incluindo o prazo de confirmação, consulte Propriedades da assinatura.
Configuração do gerenciamento de concessão
É possível configurar as seguintes propriedades nas bibliotecas de cliente de alto nível para controlar o gerenciamento de concessão.
Período máximo de extensão de confirmação. O período máximo em que a biblioteca de cliente pode estender o prazo de confirmação de uma mensagem usando a solicitação
modify acknowledgment deadline. Essa propriedade permite determinar por quanto tempo você quer que os clientes assinantes processem mensagens.Duração máxima de cada extensão de confirmação. O período máximo para estender o prazo de confirmação de cada uma das solicitações
modify acknowledgment deadline. Essa propriedade permite definir o tempo que o Pub/Sub leva para reenviar uma mensagem. A nova entrega ocorre quando o primeiro assinante que processa a mensagem falha ou fica inativo e não consegue mais enviar a solicitaçãomodify acknowledgment deadline.Duração mínima de cada extensão de confirmação. O período mínimo para estender o prazo de confirmação de cada uma das solicitações
modify acknowledgment deadline. Essa propriedade permite especificar o período mínimo que precisa passar antes que a nova entrega de uma mensagem ocorra.
Os prazos de confirmação não são garantidos, a menos que você ative a entrega exatamente uma vez.
Como gerenciar manualmente os prazos de confirmação
Recomendamos o uso das bibliotecas de cliente de alto nível. Se elas não funcionarem ou você precisar usar a extração unária, use a solicitação modify acknowledgment deadline para estender os prazos de confirmação.
A biblioteca de cliente de alto nível do C++ é uma exceção que oferece gerenciamento de concessão ao usar a extração unária. Consulte os exemplos a seguir para extração unária com gerenciamento de concessão:
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para C# (em inglês).
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Java (em inglês).
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Node.js (em inglês).
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Python (em inglês).
Ruby
O exemplo a seguir usa a biblioteca de cliente do Pub/Sub para Ruby v3. Se você ainda estiver usando a biblioteca v2, consulte o guia de migração para a v3. Para conferir uma lista de exemplos de código do Ruby v2, consulte os exemplos de código obsoletos.
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
A seguir
Leia sobre as outras opções de entrega que podem ser configuradas para uma assinatura:
Como lidar com picos transitórios usando o controle de fluxo
Como lidar com falhas de mensagens usando a política de repetição de assinatura
Como encaminhar mensagens não entregues para um tópico de mensagens inativas
Como repetir mensagens confirmadas anteriormente ou limpar mensagens