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 os clientes. O número de partições no tópico determina o número máximo de clientes assinantes que podem se conectar simultaneamente a uma assinatura.
O exemplo a seguir mostra como receber mensagens de assinaturas do 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.
Java
Para enviar uma confirmação, use o
método
AckReplyConsumer.ack()
.
Python
Para enviar uma confirmação, use o método Message.ack()
.
Confirme todas as mensagens. Os assinantes recebem primeiro a mensagem não confirmada mais antiga, seguida por cada uma das mensagens enviadas. Se um assinante ignorar uma mensagem, confirmar as mensagens subsequentes e se reconectar, o assinante receberá a mensagem não confirmada e cada mensagem subsequente 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.
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.