Quando uma mensagem é entregue a um assinante de pull, 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 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 de modifyAckDeadline.As bibliotecas de cliente de alto nível para Python, Go e Java usam o percentil 99 do atraso de confirmação para determinar a duração de cada extensão.
Com o gerenciamento de concessões, você tem 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, precisará equilibrar a troca entre um valor baixo e um valor alto. Um valor baixo aumenta a probabilidade de duplicatas, 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 de assinatura.
Configuração de gerenciamento de locação
É possível configurar as seguintes propriedades nas bibliotecas de cliente de alto nível para controlar o gerenciamento de concessões.
Período máximo de extensão do reconhecimento. 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
. Com essa propriedade, é possível determinar por quanto tempo os clientes assinantes vão processar mensagens.Duração máxima de cada extensão de reconhecimento. O período máximo de tempo para estender o prazo de confirmação de cada uma das solicitações
modify acknowledgment deadline
. Essa propriedade permite definir o período que o Pub/Sub leva para reenviar uma mensagem. A nova entrega ocorre quando o primeiro assinante que processa a mensagem falha ou fica em estado não íntegro e não consegue mais enviar a solicitaçãomodify acknowledgment deadline
.Duração mínima para cada extensão de reconhecimento. O período mínimo de tempo para estender o prazo de confirmação de cada uma das solicitações
modify acknowledgment deadline
. Essa propriedade permite especificar o tempo mínimo que precisa passar antes que uma mensagem seja reenviada.
Os prazos de confirmação não são garantidos, a menos que você ative a entrega exatamente uma vez.
Gerenciar manualmente os prazos de confirmação
Para evitar a expiração e a nova entrega de mensagens ao usar o pull unário ou as bibliotecas de cliente de baixo nível, use a solicitação modify acknowledgment deadline
para estender os prazos de confirmação. As exceções são as bibliotecas de cliente de alto nível em Go e C++, que oferecem gerenciamento de concessão ao usar o pull unário. Confira os exemplos a seguir de 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 C#.
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 Java.
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 Node.js.
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 Python.
Ruby
O exemplo a seguir usa a biblioteca de cliente do Ruby Pub/Sub 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 descontinuados.
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 você pode configurar para uma assinatura:
Lidar com falhas de mensagens usando a política de novas tentativas de assinatura
Encaminhar mensagens não entregues para um tópico de mensagens inativas
Repetir mensagens confirmadas anteriormente ou limpar mensagens