Como repetir e limpar mensagens

As APIs de dados de assinantes do Pub/Sub, como pull, fornecem acesso limitado aos dados de mensagens. Normalmente, as mensagens confirmadas ficam inacessíveis para os assinantes. Além disso, os clientes assinantes precisam processar todas as mensagens de uma assinatura, mesmo que apenas um subconjunto seja necessário.

O recurso Busca amplia a funcionalidade de assinante, permitindo que você altere o estado de confirmação de mensagens em massa. Por exemplo, é possível repetir mensagens confirmadas anteriormente ou limpá-las em massa. Também é possível copiar o estado de uma assinatura em outra usando a busca em combinação com um Snapshot.

Esses recursos estão descritos abaixo. mas você pode ver um exemplo prático no guia de início rápido.

Como funciona?

Como buscar um carimbo de data/hora

A busca por um horário marca todas as mensagens recebidas pelo Pub/Sub antes e depois do horário de confirmação. Busque um horário no futuro para limpar mensagens. Para repetir e reprocessar mensagens confirmadas anteriormente, busque um horário passado. O horário de publicação da mensagem é gerado pelos servidores do Pub/Sub. Consulte publishTime na referência da API. Essa abordagem é imprecisa pelos seguintes motivos:

  • Os relógios dos servidores do Pub/Sub podem ter diferenças.

  • O Pub/Sub precisa trabalhar com o horário de chegada da solicitação de publicação em vez de quando um evento ocorreu no sistema de origem.

Para buscar um horário passado, primeiro configure a assinatura para reter mensagens confirmadas:

  • Uma mensagem confirmada será retida em uma assinatura somente se a propriedade retain_acked_messages da assinatura for definida como verdadeira (o padrão é falso), por até message_retention_duration após a publicação (o padrão é sete dias). As mensagens confirmadas serão retidas somente se forem confirmadas após o retain_acked_messages da assinatura ser definido como true.
  • Uma mensagem não confirmada é retida em uma assinatura por até message_retention_duration após a publicação (o padrão é sete dias).
  • As propriedades retain_acked_messages e message_retention_duration de uma assinatura podem ser especificadas na criação da assinatura ou atualizadas para uma assinatura atual.

Como buscar um instantâneo

O recurso "Snapshot" permite capturar o estado de confirmação de mensagens de uma assinatura. Depois que um snapshot é criado, ele retém:

  • todas as mensagens que não foram confirmadas na assinatura de origem no momento da criação do snapshot;

  • qualquer mensagem publicada no tópico a partir de então.

É possível repetir essas mensagens não confirmadas usando um snapshot para buscar qualquer assinatura do tópico.

Diferentemente da busca por um horário, não é preciso executar nenhuma configuração de assinatura especial para procurar um snapshot. Você só precisa criar o snapshot com antecedência. Por exemplo, é possível criar um snapshot ao implantar um novo código de assinante, caso precise se recuperar de confirmações inesperadas ou errôneas.

Os instantâneos expiram e são excluídos nos seguintes casos (o que ocorrer primeiro):

  • Quando eles completam sete dias de vida útil.
  • A mensagem mais antiga não confirmada no snapshot excede o message retention duration.

Por exemplo, considere um snapshot de uma assinatura com um backlog em que a mensagem não confirmada mais antiga tenha um dia. O snapshot expira depois de seis dias, em vez de sete. Esse cronograma é necessário para que os snapshots ofereçam fortes garantias de exibição pelo menos uma vez.

Consistência posterior

As operações de busca são estritamente consistentes em relação às garantias de entrega de mensagens. Isso significa que qualquer mensagem que não seja confirmada com base na condição de busca terá garantia de ser entregue pelo menos uma vez após a operação de busca ser realizada. No entanto, as mensagens entregues não se tornam instantaneamente consistentes com a operação de busca. Portanto, uma mensagem que foi publicada antes do carimbo de data/hora de busca ou que está confirmada em um snapshot pode ser entregue após a operação de busca. De certo modo, a entrega de mensagens funciona como um sistema de consistência posterior com relação à operação de busca. Pode levar até um minuto para que a operação tenha efeito total.

Casos de uso

  • Atualize o código do assinante com segurança. Uma preocupação com a implantação de um novo código de assinante é que o novo executável possa confirmar mensagens erroneamente, levando à perda delas. A incorporação de instantâneos no seu processo de implantação permite se recuperar de bugs no novo código do assinante.
  • Recupere-se de problemas inesperados do assinante. Se os problemas do assinante não estiverem associados a um evento de implantação específico, pode ser que você não tenha um instantâneo relevante. Nesse caso, se você ativou a retenção de mensagem confirmada para uma assinatura, uma maneira de se recuperar do erro é buscar um horário no passado.
  • Economize tempo e custo de processamento. Realize uma confirmação em massa em um grande backlog de mensagens que não são mais relevantes.
  • Teste o código do assinante em dados conhecidos. Ao testar o código do assinante quanto a desempenho e consistência, vale a pena usar os mesmos dados em todas as execuções. Os snapshots proporcionam dados consistentes com semântica forte. Além disso, os snapshots podem ser aplicados a qualquer assinatura de um determinado tópico, incluindo uma recém-criada.

Como buscar com tópicos de mensagens inativas e políticas de repetição

Se você buscar mensagens em uma assinatura com um tópico de letra inativa, o Pub/Sub definirá as tentativas de entrega como 0.

Se você buscar mensagens em uma assinatura com uma política de repetição, o Pub/Sub redefinirá o atraso entre os seguintes itens:

  1. O prazo de confirmação expira ou o assinante envia uma confirmação negativa.
  2. O Pub/Sub reenvia a mensagem.

A seguir

É possível usar o Pub/Sub com o Dataflow. No entanto, não recomendamos o acesso direto à busca do Pub/Sub a partir de um pipeline do Dataflow em execução. Para o fluxo de trabalho recomendado, consulte Como usar o Pub/Sub com o Dataflow.