Repita uma mensagem no Pub/Sub procurando um instantâneo ou uma data/hora
O Pub/Sub não pode obter as mensagens depois de as ter confirmado. No entanto, por vezes, pode ser necessário reproduzir as mensagens reconhecidas, por exemplo, se tiver feito um reconhecimento incorreto. Em seguida, pode usar a funcionalidade Seek para marcar mensagens reconhecidas anteriormente como não reconhecidas e forçar o Pub/Sub a reenviar essas mensagens. Também pode usar a funcionalidade de procura para eliminar as mensagens não reconhecidas alterando o respetivo estado para reconhecido.
Avançar para um instante ou para uma data/hora para repetir as mensagens numa subscrição. Este guia mostra exemplos de como repetir mensagens do Pub/Sub reconhecidas anteriormente através da funcionalidade de procura.
Para seguir orientações passo a passo para esta tarefa diretamente na Google Cloud consola, clique em Orientar-me:
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
You can view and manage these resources at any time in the Google Cloud console.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
You can view and manage these resources at any time in the Google Cloud console.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
Na Google Cloud consola, aceda à página Subscrições do Pub/Sub.
Selecione uma subscrição na lista.
Clique em Criar instantâneo.
Introduza um ID para a captura instantânea e, de seguida, clique em Criar para guardar.
Na Google Cloud consola, aceda à página Subscrições do Pub/Sub.
Selecione uma subscrição na lista.
Clique em Replay messages.
Em Procurar, selecione Para um ponto temporal anterior ou Para uma captura instantânea e, de seguida, selecione o ponto temporal ou a captura instantânea para procurar.
Clique em Procurar para repetir as mensagens.
Usar a interface de linhas de comando gcloud
A forma mais fácil de usar o gcloud é no Cloud Shell . Também pode usar a ferramenta de linha de comandos incluída na CLI Google Cloud. Os pré-requisitos de configuração são cumpridos automaticamente para a CLI gcloud se criar uma instância de máquina do Compute Engine com âmbitos de acesso que incluam todas as APIs Cloud e a imagem Debian predefinida. A forma mais simples de o criar é através da IU do Compute Engine. Para o resto deste documento, vamos assumir que está a usar uma destas ferramentas de linha de comandos.
Para mais informações sobre a utilização do gcloud, consulte o início rápido do gcloud.
Consulte também a secção gcloud pubsub na
referência gcloud
para ver uma lista completa dos comandos gcloud
do Pub/Sub.
Crie e avance rapidamente para instantâneos
Crie um tópico e uma subscrição. Para uma melhor interatividade, use um prazo de confirmação curto:
gcloud pubsub topics create seek-demo-topic gcloud pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10
Até agora, nenhuma mensagem na subscrição foi confirmada. Capture este estado criando um instantâneo:
gcloud pubsub snapshots create my-snapshot --subscription=seek-demo-sub gcloud pubsub snapshots list
Agora, publique, obtenha e confirme uma mensagem:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
Tenha em atenção que as obtenções subsequentes não geram novas mensagens (alguns duplicados transitórios são possíveis):
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
Pode recuperar a mensagem subscrevendo a captura instantânea. Tenha em atenção que a mensagem pode não ser entregue instantaneamente: o Pub/Sub não garante a latência de entrega de mensagens. No entanto, o que é garantido é que as mensagens retidas na imagem instantânea vão ser eventualmente entregues, pelo menos, uma vez:
gcloud pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot gcloud pubsub subscriptions pull seek-demo-sub --auto-ack
Tenha em atenção que pode procurar outras subscrições para a mesma captura instantânea, desde que o tópico da subscrição seja o mesmo que o tópico da captura instantânea:
gcloud pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10 gcloud pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot
A extração de dados de seek-demo-sub2
vai gerar mensagens publicadas antes da criação de seek-demo-sub2
:
gcloud pubsub subscriptions pull seek-demo-sub2 --auto-ack
Quando terminar a captura instantânea, limpe:
gcloud pubsub snapshots delete my-snapshot
Procure uma indicação de tempo
Outra forma de repetir mensagens que foram confirmadas é procurar uma indicação de tempo. Para procurar uma indicação de tempo, primeiro tem de configurar a subscrição para reter mensagens reconhecidas através da API Google Cloud Pub/Sub.retain-acked-messages
Se a opção retain-acked-messages
estiver definida, o Pub/Sub retém as mensagens confirmadas durante 7 dias.
Só tem de realizar este passo se pretender procurar um ponto específico no tempo e não uma imagem instantânea.
gcloud pubsub subscriptions update seek-demo-sub --retain-acked-messages
Agora, publique, obtenha e confirme uma mensagem:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
A próxima obtenção não deve devolver mensagens:
gcloud pubsub subscriptions pull seek-demo-sub
Agora, procure a subscrição novamente para recuperar a mensagem. Tenha em atenção que os indicadores aritméticos de data diferem entre as versões GNU e BSD (MacOS) do comando de data:
export TS_FORMAT=%Y-%m-%dT%H:%M:%SZ gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)
Para mais informações sobre os formatos de hora suportados, consulte gcloud topic datetimes.
Uma obtenção subsequente deve gerar a mensagem novamente:
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
Também pode usar a funcionalidade de procura para ignorar a entrega de todas as mensagens publicadas antes de um determinado momento, como a hora atual. Para o fazer, procure a subscrição até à hora atual para marcar como reconhecidas todas as mensagens anteriores:
gcloud pubsub topics publish seek-demo-topic --message 'hello, world' gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)
Após algum atraso de propagação (~60 segundos), a mensagem deixa de ser entregue. Pode verificar isto executando repetidamente o comando pull sem confirmar a mensagem:
gcloud pubsub subscriptions pull seek-demo-sub
Usar a Cloud Console
Pode criar instantâneos ou procurar instantâneos existentes na página de detalhes da subscrição da consola do Google Cloud. Para ver as regras de nomenclatura de instantâneos, consulte o artigo Nomes de recursos.
Criar um instantâneo
Pode ver as capturas de ecrã na página de capturas de ecrã na Google Cloud consola. Também pode gerir as capturas instantâneas na página de detalhes de um tópico individual.
Reativar uma subscrição
A caixa de diálogo Repetir mensagens permite-lhe procurar um ponto no tempo anterior ou um resumo guardado. Para abrir a caixa de diálogo:
Como correu?
Tenha em atenção que estão disponíveis recursos e links adicionais na página de apoio técnico do Pub/Sub.
O que se segue?
Consulte o artigo Repetir e rejeitar mensagens.