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 consistente com relação à operação de busca. Pode levar até um minuto para que a operação tenha efeito total.

Busca com filtros

Você pode reproduzir mensagens novamente a partir de assinaturas com filtros. Se você buscar um carimbo de data/hora usando uma assinatura com um filtro, o serviço do Pub/Sub só reenviará as mensagens que corresponderem ao filtro.

Um snapshot de uma assinatura com um filtro contém as seguintes mensagens:

  • Todas as mensagens que são mais recentes que o snapshot, incluindo aquelas que não correspondem ao filtro.
  • Mensagens não confirmadas que são mais antigas do que o snapshot.

Se você buscar um snapshot usando uma assinatura com um filtro, o serviço do Pub/Sub só reenviará as mensagens no snapshot que corresponderem ao filtro da assinatura que faz a solicitação de busca.

Para mais informações sobre filtros, consulte Como filtrar mensagens.

Procurar tópicos com mensagens inativas

Se você buscar mensagens em uma assinatura com um tópico de mensagem inativa, o Pub/Sub definirá as tentativas de entrega como 0. As assinaturas com tópicos de mensagem inativa têm uma propriedade que limita o número de tentativas de entrega.

Para mais informações sobre tópicos de mensagens inativas, consulte Como encaminhar para tópicos de mensagens inativas.

Procurar políticas de nova tentativa

Se você buscar mensagens em uma assinatura com uma política de nova tentativa, 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.

Para mais informações sobre políticas de nova tentativa, consulte Como usar políticas de nova tentativa.

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.

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.