Esta página explica como receber mensagens de assinaturas Lite. Você pode receber mensagens com a biblioteca de cliente do Pub/Sub Lite para Java.
As assinaturas Lite conectam os tópicos Lite aos aplicativos dos assinantes. Os assinantes recebem mensagens de assinaturas Lite. Os assinantes recebem todas as mensagens que os aplicativos do editor enviam para o tópico do Lite, incluindo as mensagens que os editores enviam antes de criar a assinatura do Lite.
Antes de receber mensagens de uma assinatura do Lite, crie um tópico do Lite, uma assinatura do Lite para esse tópico e publique mensagens para o tópico do Lite.
Receber mensagens
Para receber mensagens de uma assinatura do Lite, solicite mensagens da assinatura do Lite. A biblioteca de cliente se conecta automaticamente às partições no tópico do Lite anexado à assinatura do Lite. Se mais de um cliente assinante for instanciado, as mensagens serão distribuídas entre todos eles. O número de partições no tópico determina a quantidade máxima de clientes assinantes que podem se conectar a uma assinatura ao mesmo tempo.
Os assinantes podem levar até um minuto para inicializar e começar a receber mensagens. Após a inicialização, as mensagens são recebidas com latência mínima.
O exemplo a seguir mostra como receber mensagens de assinaturas do Lite:
gcloud
Este comando requer o Python 3.6 ou superior e a instalação do pacote Python grpcio. Para usuários do MacOS, Linux e Cloud Shell, execute o seguinte:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Para receber mensagens, use o comando gcloud pubsub lite-subscriptions subscribe:
gcloud pubsub lite-subscriptions subscribe SUBSCRIPTION_ID \
--location=LITE_LOCATION \
--auto-ack
Substitua:
- SUBSCRIPTION_ID: o ID da assinatura Lite
- LITE_LOCATION: o local da assinatura do Lite.
Go
Antes de executar este exemplo, siga as instruções de configuração do Go nas bibliotecas de cliente do Pub/Sub Lite.
Java
Antes de executar este exemplo, siga as instruções de configuração do Java nas bibliotecas de cliente do Pub/Sub Lite.
Python
Antes de executar este exemplo, siga as instruções de configuração do Java nas bibliotecas de cliente do Pub/Sub Lite.
A biblioteca de cliente estabelece conexões de streaming bidirecionais para cada uma das partições no tópico do Lite.
O assinante solicita conexões às partições.
O serviço Pub/Sub Lite entrega as mensagens ao assinante.
Depois de processar a mensagem, o assinante precisa confirmá-la. A biblioteca de cliente processa e confirma mensagens de maneira assíncrona em um callback. Para limitar o número de mensagens não confirmadas que o assinante pode armazenar na memória, defina as configurações de controle de fluxo.
Se vários assinantes receberem mensagens da mesma assinatura do Lite, o serviço Lite do Pub/Sub conectará cada assinante a uma proporção igual de partições. Por exemplo, se dois assinantes usarem a mesma assinatura do Lite e a assinatura do Lite estiver anexada a um tópico do Lite com duas partições, cada assinante receberá mensagens de uma das partições.
Como confirmar mensagens
Para confirmar uma mensagem, envie uma confirmação para a assinatura Lite.
Go
Para enviar uma confirmação, use o método Message.Ack()
.
Java
Para enviar uma confirmação, use o
método
AckReplyConsumer.ack()
.
Python
Para enviar uma confirmação, use o método Message.ack()
.
Os assinantes precisam confirmar todas as mensagens. Eles recebem primeiro a mensagem não confirmada mais antiga, seguida por cada uma das que foram enviadas. Se um assinante ignorar uma mensagem, confirmar as posteriores e se reconectar, ele receberá a mensagem não confirmada e cada mensagem posterior confirmada.
As assinaturas do Lite não têm um prazo de confirmação e o serviço Pub/Sub Lite não reenvia mensagens não confirmadas por uma conexão de streaming aberto.
Como usar o controle de fluxo
Depois que o serviço do Pub/Sub Lite entrega mensagens aos assinantes, eles armazenam mensagens não confirmadas na memória. É possível limitar o número de mensagens pendentes que os assinantes podem armazenar na memória usando as configurações de controle de fluxo. As configurações de controle de fluxo são aplicadas a cada partição de que um assinante recebe mensagens.
É possível definir as seguintes configurações de controle de fluxo:
- Tamanho de mensagem pendente. O tamanho máximo, em bytes, das mensagens subsequentes. O tamanho máximo precisa ser maior que o tamanho da maior mensagem.
- Número de mensagens. O número máximo de mensagens pendentes.
O tamanho de uma mensagem está no
campo size_bytes
(em inglês).
É possível definir as configurações de controle de fluxo com a biblioteca de cliente.
Go
Para definir as configurações de controle de fluxo, transmita ReceiveSettings
ao chamar pscompat.NewSubscriberClientWithSettings
. É possível definir os seguintes parâmetros em ReceiveSettings
:
MaxOutstandingMessages
MaxOutstandingBytes
Para conferir um exemplo, consulte este exemplo de controle de fluxo.
Java
Para definir as configurações do controle de fluxo, use os seguintes métodos na
classe
FlowControlRequest.Builder
:
Python
Para definir as configurações do controle de fluxo, defina os seguintes parâmetros na classe
FlowControlSettings
:
bytes_outstanding
messages_outstanding
Por exemplo, se o número máximo de mensagens for 100 e o assinante se conectar a 10 partições, não será possível receber mais de 100 mensagens de nenhuma das 10 partições. O número total de mensagens pendentes pode ser maior que 100, mas o assinante não pode armazenar mais de 100 mensagens de cada partição.