Guia de início rápido: como repetir mensagens

Neste guia, mostraremos exemplos de como repetir mensagens da API Pub/Sub.

Como usar a interface de linha de comando gcloud

A maneira mais fácil de usar a gcloud é no Cloud Shell. Também é possível usar a ferramenta de linha de comando que vem com o SDK do Cloud. Os pré-requisitos de configuração serão atendidos automaticamente para o SDK do Cloud se você criar uma nova instância de máquina do Compute Engine com escopos de acesso, incluindo todas as APIs do Cloud e a imagem do Debian padrão. A maneira mais simples de criá-la é por meio da IU do Compute Engine. No restante deste documento, vamos supor que você esteja usando uma dessas ferramentas de linha de comando.

Para mais informações sobre como usar a gcloud, consulte o guia de início rápido da gcloud. Veja também a seção sobre gcloud pubsub na referência da gcloud para uma lista completa de comandos gcloud do Pub/Sub.

Criar e buscar snapshots

Crie um tópico e uma assinatura. Para ter melhor interatividade, use um prazo de confirmação curto:

alias pubsub='gcloud beta pubsub'
pubsub topics create seek-demo-topic
pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10

Até o momento, nenhuma mensagem na assinatura foi confirmada. Capture esse estado criando um instantâneo:

pubsub snapshots create my-snapshot --subscription=seek-demo-sub
pubsub snapshots list

Agora publique, efetue pull e confirme uma mensagem:

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions pull --auto-ack seek-demo-sub

Observe que os pulls subsequentes não produzem novas mensagens (mas podem gerar algumas duplicatas transitórias):

pubsub subscriptions pull --auto-ack seek-demo-sub

É possível recuperar a mensagem buscando a assinatura do instantâneo. Talvez a mensagem não seja entregue instantaneamente porque o Pub/Sub não garante a latência de entrega de mensagens. No entanto, é certo que as mensagens retidas no instantâneo serão entregues pelo menos uma vez:

pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot
pubsub subscriptions pull seek-demo-sub --auto-ack

É possível buscar outras assinaturas do mesmo snapshot, desde que o tópico da assinatura seja igual ao do snapshot:

pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10
pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot

Fazer pull de seek-demo-sub2 agora produzirá mensagens que foram publicadas antes da criação de :

pubsub subscriptions pull seek-demo-sub2 --auto-ack

Quando você terminar de utilizar o snapshot, faça a limpeza:

pubsub snapshots delete my-snapshot

Buscar um carimbo de data/hora

Outra maneira de repetir mensagens que foram confirmadas é buscar um carimbo de data/hora. Para isso, primeiro configure a assinatura para reter as mensagens confirmadas usando retain-acked-messages. Por padrão, as mensagens são retidas por sete dias. Defina a duração para ser mais curta (mas não menor que 10 minutos) usando message-retention-duration. Para mais informações, consulte a seção sobre como buscar um carimbo de data/hora em Como repetir e descartar mensagens.

Só é necessário executar esta etapa caso pretenda buscar um carimbo de data/hora, e não um snapshot.

pubsub subscriptions update seek-demo-sub --retain-acked-messages

Agora publique, efetue pull e confirme uma mensagem:

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions pull --auto-ack seek-demo-sub

O próximo pull não pode retornar nenhuma mensagem:

pubsub subscriptions pull seek-demo-sub

Agora, busque a assinatura no histórico para recuperar a mensagem. Observe que as sinalizações aritméticas de data diferem entre as versões GNU e BSD (MacOS) do comando date:

TS_FORMAT=%Y-%m-%dT%H:%M:%SZ
pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)

Um pull subsequente produz a mensagem novamente:

pubsub subscriptions pull --auto-ack seek-demo-sub

É possível também usar a busca para pular a entrega de todas as mensagens publicadas antes de um determinado momento, como a hora atual. Para fazer isso, busque a assinatura da hora atual para marcar como confirmadas todas as mensagens anteriores:

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)

Um atraso na propagação de cerca de 60 segundos significa que a mensagem não será mais entregue. Verifique isso executando repetidamente o comando pull sem confirmar a mensagem:

pubsub subscriptions pull seek-demo-sub

Como usar o Console do Cloud

Crie snapshots ou busque snapshots atuais na página de detalhes da assinatura do Console do Cloud. Para regras de nomenclatura de snapshots, consulte Nomes de recursos.

A caixa de diálogo de busca oferece a opção de buscar por um snapshot ou um horário:

Também é possível gerenciar snapshots na página de detalhes de um tópico individual:

Como foi?

Os recursos e links extras estão disponíveis na página de suporte do Pub/Sub.

A seguir

Consulte Como repetir e descartar mensagens.