Política de novas tentativas de subscrição

Um subscritor pode não processar mensagens por vários motivos. Por exemplo, o subscritor pode ter problemas temporários na obtenção dos dados necessários ou pode receber uma mensagem num formato inesperado.

Se o Pub/Sub tentar entregar uma mensagem, mas o subscritor não a conseguir confirmar, o Pub/Sub tenta reenviar automaticamente a mensagem. Esta tentativa de reenvio é conhecida como a política de repetição da subscrição. Esta não é uma funcionalidade que pode ativar ou desativar. No entanto, pode escolher o tipo de política de repetição que quer usar.

Antes de começar

  • Crie um tópico que vai usar com a sua subscrição que contém uma política de novas tentativas de subscrição.

Funções necessárias

Para receber as autorizações de que precisa para gerir tópicos e subscrições, peça ao seu administrador para lhe conceder a função do IAM de editor do Pub/Sub(roles/pubsub.editor) no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Pode configurar o controlo de acesso ao nível do projeto e ao nível do recurso individual. Pode criar uma subscrição num projeto e anexá-la a um tópico localizado num projeto diferente. Certifique-se de que tem as autorizações necessárias para cada projeto.

Tipos de políticas de repetição

Quando cria e configura a sua subscrição pela primeira vez, pode optar por usar uma das seguintes políticas de repetição: reenvio imediato ou recuo exponencial. Por predefinição, as subscrições usam a reentrega imediata.

Reentrega imediata

Por predefinição, o Pub/Sub tenta reenviar a mensagem imediatamente (e, potencialmente, ao mesmo cliente subscritor). No entanto, se as condições que impediram a confirmação da mensagem não tiverem sido alteradas, a reentrega imediata pode causar problemas. Neste caso, é possível que o Pub/Sub reenvie várias mensagens que não podem ser confirmadas.

Para resolver problemas de reentrega imediatos, o Pub/Sub permite-lhe configurar uma política de recuo exponencial.

Retirada exponencial

A retirada exponencial permite-lhe adicionar intervalos de tempo progressivamente mais longos entre as tentativas de repetição. Após a primeira falha de entrega, o Pub/Sub aguarda um tempo de recuo mínimo antes de tentar novamente. Para cada falha de mensagem consecutiva, é adicionado mais tempo ao atraso, até um atraso máximo (0 e 600 segundos).

Os intervalos de atraso máximo e mínimo não são fixos e devem ser configurados com base em fatores locais da sua aplicação.

Tenha em atenção as seguintes considerações acerca da retirada exponencial:

  • A retirada exponencial é acionada nas seguintes ações:
    • Quando é recebido um reconhecimento negativo.
    • Quando o prazo de confirmação de uma mensagem expira.
  • A retirada exponencial só é aplicada por mensagem, em vez de a todas as mensagens numa subscrição (global).
  • Enquanto usa o recuo exponencial, o Pub/Sub continua a enviar outras mensagens, mesmo que as mensagens anteriores tenham recebido reconhecimentos negativos (a menos que esteja a usar o envio de mensagens ordenado).

Use a política de repetição para atrasar a entrega e o processamento de um subconjunto de mensagens para acomodar uma incapacidade transitória de processar algumas mensagens após a entrega. A funcionalidade é aplicada com base no melhor esforço e cada mensagem é avaliada separadamente para a política de repetição.

Não recomendamos a utilização desta funcionalidade para introduzir atrasos intencionais na entrega de mensagens. Se enviar um reconhecimento negativo (NACK) de um grande número de mensagens numa subscrição configurada com uma política de repetição, é possível que algumas dessas mensagens sejam entregues com um recuo menor ou nenhum. O Pub/Sub também pode abrandar a entrega de todas as mensagens se enviar um reconhecimento negativo de um grande número de mensagens.

Se precisar de agendar entregas, considere usar o Cloud Tasks.

Configure a retirada exponencial

Consola

Quando cria uma nova subscrição, pode configurar uma política de repetição de recuo exponencial através dos seguintes passos:

  1. Na Google Cloud consola, aceda à página Subscrições do Pub/Sub.

Aceder às subscrições

  1. Clique em Criar subscrição.

  2. No campo ID da subscrição, introduza um nome.

Para obter informações sobre como atribuir um nome a uma subscrição, consulte as diretrizes para atribuir um nome a um tópico ou a uma subscrição.

  1. Escolha ou crie um tópico no menu pendente.

A subscrição recebe mensagens do tópico.

  1. Selecione um Tipo de fornecimento.

  2. Em Política de repetição, selecione Repetir após retirada exponencial.

  3. Introduza um Recuo mínimo e um Recuo máximo entre 0 e 600 segundos.

Os valores predefinidos são 10 segundos para o recuo mínimo e 600 segundos para o recuo máximo.

  1. Clique em Criar.

gcloud

Para criar uma nova subscrição com uma política de repetição de retirada exponencial, execute o seguinte comando gcloud pubsub create.

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --min-retry-delay=MIN_RETRY_DELAY \
  --max-retry-delay=MAX_RETRY_DELAY

Substitua o seguinte:

  • SUBSCRIPTION_ID: um ID exclusivo para a sua subscrição.
  • TOPIC_ID: o ID do tópico ao qual quer anexar a subscrição.
  • MIN_RETRY_DELAY: o atraso de recuo mínimo para a subscrição.
  • MAX_RETRY_DELAY: o atraso máximo de recuo para a subscrição.

O que se segue?