Como reproduzir e descartar mensagens

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

O recurso Busca expande a funcionalidade do assinante, permitindo alterar o estado de confirmação das mensagens em massa. Com ele, é possível reproduzir mensagens confirmadas anteriormente ou descartar mensagens em massa, por exemplo. Também permite copiar o estado de uma assinatura em outra usando a busca em combinação com um Instantâneo, introduzido como parte do recurso de busca. A recuperação de mensagens confirmadas geralmente requer que a assinatura original seja configurada com antecedência e resulta em tarifas de armazenamento extras.

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

Quando uma busca por um horário é feita, todas as mensagens recebidas pelo Cloud Pub/Sub antes do horário são marcadas como confirmadas e todas as mensagens recebidas após o horário como não confirmadas. É possível procurar um horário no futuro para descartar mensagens. Para reproduzir e reprocessar mensagens confirmadas anteriormente, busque um horário passado. O horário de publicação da mensagem é gerado pelos servidores do Cloud Pub/Sub. Consulte publishTime na referência da API. Essa abordagem é imprecisa devido à possível defasagem horária entre os servidores do Cloud Pub/Sub, além do fato de o Cloud Pub/Sub precisar trabalhar com a hora de chegada da solicitação de publicação, em vez do momento em que um evento ocorreu no sistema de origem.

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

  • Uma mensagem confirmada só será retida em uma assinatura se a propriedade retain_acked_messages da assinatura estiver configurada como "true" (o padrão é "false") por até message_retention_duration depois de ser publicada (o padrão é sete dias). As mensagens confirmadas só serão retidas se forem confirmadas depois que o valor de retain_acked_messages da assinatura for definido como true.
  • Uma mensagem não confirmada é retida em uma assinatura por até message_retention_duration depois de ser publicada (o padrão é sete dias).
  • É possível especificar as propriedades retain_acked_messages e message_retention_duration de uma assinatura no momento em que ela for criada ou atualizá-las caso a assinatura já exista.

Como buscar um instantâneo

O recurso Instantâneo permite capturar o estado de confirmação de mensagens de uma assinatura. Depois que um instantâneo é criado, ele retém todas as mensagens que não foram confirmadas na assinatura original (no momento da criação do instantâneo), bem como qualquer mensagem publicada no tópico a partir de então. É possível reproduzir essas mensagens não confirmadas usando um instantâneo para buscar qualquer assinatura do tópico.

Ao contrário da busca por um horário, não é necessário executar nenhuma configuração especial na assinatura para buscar um instantâneo. Basta criá-lo antecipadamente. Por exemplo, é possível criar um instantâneo 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.
  • Quando a mensagem não confirmada mais antiga no instantâneo excede a message retention duration

Por exemplo, considere um instantâneo de uma assinatura com um backlog em que a mensagem não confirmada mais antiga tenha um dia. O instantâneo expirará após seis dias, em vez de sete. Isso é necessário para que os instantâneos ofereçam garantia sólida de entrega pelo menos uma vez.

Consistência eventual

As operações de busca são estritamente consistentes com relação a 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. Porém, isso não quer dizer que as mensagens entregues se tornem instantaneamente consistentes com a operação de busca. Uma mensagem que tenha sido publicada antes do carimbo de data e hora da busca ou que seja confirmada em um instantâneo ainda 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.

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 instantâneos permitem esse uso com semântica forte, além de poderem ser aplicados a qualquer assinatura em um determinado tópico, mesmo criado recentemente.

A seguir

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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Pub/Sub