Todos os produtos
Search
Central de documentação

Platform For AI:Queue service subscription and pushing

Última atualização: Aug 28, 2026

A assinatura e o push enviam dados prontos imediatamente ao cliente, o que reduz a latência causada por polling via Get API e diminui a carga no service de fila gerada por consultas frequentes. No entanto, esse recurso apresenta certa complexidade, pois envolve diversos conceitos adicionais. Este tópico descreve como utilizar a funcionalidade de assinatura e push do service de fila.

Consumer

Um consumer é um programa cliente que assina dados do service de fila. Quando o cliente utiliza a Watch API para solicitar dados, o service de fila cria um objeto consumer. Os parâmetros da API (como tamanho da janela e tags) tornam-se atributos desse consumer. Para visualizar o status do consumer, utilize a Attribute API. Exemplo:

[OK] Attributes: 
consumers.list.[0] : Id: default_group.u1, Index: 0, Pending: 0, Status: Complete, Idle: 2.091s, Window: 0, Slots: 0, AutoCommit: true
consumers.list.[1] : Id: default_group.u2, Index: 0, Pending: 0, Status: Complete, Idle: 1.124s, Window: 0, Slots: 0, AutoCommit: true
consumers.stats.total : 2

consumers.stats.total indica o número total de consumers. consumers.list representa a lista de consumers. A tabela a seguir descreve as colunas:

Parameter

Description

Id

ID do consumer, no formato <consumer group Id.consumer Id>.

Index

Índice dos dados que o consumer está consumindo.

Pending

Quantidade de dados em processamento ainda não confirmados (committed) pelo consumer atual.

Status

Status do consumer. Valores válidos:

  • Running: o consumer está em execução.

  • Exit: o consumer saiu há muito tempo e nenhum dado está sendo consumido.

  • Complete: o consumer saiu e os dados foram consumidos.

  • Leaving: o consumer saiu por um curto período.

Window

Tamanho da janela do consumer, correspondente à quantidade máxima de dados enviados via push.

Slots

Número de janelas ociosas. O valor 0 indica que a janela está ocupada.

AutoCommit

Indica se os dados devem ser confirmados automaticamente após o envio.

Tags

Condições de filtro do consumer.

Nota

Ao usar a Watch API com tags, certifique-se de que todos os consumers do mesmo consumer group utilizem exatamente as mesmas tags.

Ao utilizar a Watch API com a tag de dados, uma coluna adicional chamada Tags será exibida. Exemplo:

consumers.list.[0] : Id: ..., Pending: 0, ..., Window: ..., Tags: tags[foo=bar]

Essa coluna indica as tags de dados assinadas pelo consumer. Os dados são entregues ao consumer apenas quando atendem às condições especificadas.

Consumer group

Um consumer group é um conjunto de consumers que assinam o service de fila com as mesmas condições de filtro. Consumers dentro do mesmo grupo não podem ter nomes idênticos, mas consumers em grupos diferentes podem compartilhar o mesmo nome.

Dentro de um mesmo consumer group, os dados são distribuídos uniformemente entre os consumers. Entre grupos distintos, os dados são enviados via push em paralelo para os consumers de cada grupo. Por exemplo:

  • Consumers no mesmo grupo recebem dados diferentes.

  • Consumers em grupos diferentes recebem os mesmos dados.

Importante

Se um consumer excluir dados por meio da API, a exclusão ocorre imediatamente e os consumers de outros grupos não poderão mais receber esses dados.

Para visualizar o status do consumer no service de fila, utilize a Attribute API. Veja o exemplo abaixo:

groups.list.[0] : Id: default_group, Index: 0, Pending: 0, Delivered: 0, Consumers: 1
groups.list.[1] : Id: group, Index: 0, Pending: 0, Delivered: 1, Consumers: 0

groups.list corresponde à lista de consumers. A tabela a seguir detalha as colunas:

Parameter

Description

Id

ID do consumer group.

Index

Índice atualmente consumido pelo consumer group, correspondente ao maior índice entre os consumers do grupo.

Pending

Quantidade de dados em processamento ainda não confirmados pelo consumer group atual.

Delivered

Número de mensagens enviadas via push.

Consumers

Quantidade de dados consumidos no consumer group.

Não há limite para o número de consumer groups, mas eles não são limpos automaticamente. Após a criação, o status é mantido permanentemente.

Uso de consumers e consumer groups

Declare o consumer e o consumer group por meio de cabeçalhos HTTP na Watch API ou durante a inicialização do cliente no SDK. Também é possível obter a chave do cabeçalho HTTP usando a Attributes API.

meta.header.group : X-EAS-QueueService-Gid
meta.header.user : X-EAS-QueueService-Uid

Declare o ID do consumer e o ID do consumer group ao qual deseja ingressar utilizando, respectivamente, X-EAS-QueueService-Uid e X-EAS-QueueService-Gid.

Commit e Negative

O service de fila oferece suporte a dois métodos de consumo: Commit e Negative. Ambos operam sobre o Index dos dados, mas possuem semânticas distintas.

  • Commit sinaliza que o consumer recebeu os dados e concluiu o processamento, permitindo o envio do próximo lote via push.

  • Negative indica que o consumer recebeu os dados, mas não conseguiu processá-los. Nesse caso, o service de fila decide se deve enviar o próximo lote com base no código de erro. No modo Negative, declare a causa e o código de erro em texto para redirecionar os dados a outros consumers. A tabela abaixo lista os códigos de erro especiais tratados pelo service de fila:

    Code

    Description

    Shutdown

    Indica que o consumer está saindo e o service de fila deve interromper o envio de dados.

Rebalanceamento de dados

Em alguns cenários, pode não ser possível confirmar (commit) os dados:

  • Durante uma atualização contínua (rolling update) do service de previsão, alguns consumers são encerrados, deixando dados em processamento sem confirmação.

  • Ocorre um erro interno e o consumer falha.

  • O consumer não consegue processar os dados recebidos e executa um commit do tipo Negative.

O service de fila redistribui os dados não processados para outros consumers. Esse mecanismo é chamado de rebalanceamento de dados. O rebalanceamento ocorre nas seguintes situações:

  • Qualquer consumer entra no estado Exit.

  • O consumer não recebe novos dados via push mesmo havendo espaço ocioso na janela.

O service de fila mantém um contador de entregas para cada dado. Sempre que os dados são rebalanceados e redistribuídos, esse contador é incrementado. Se, durante o rebalanceamento, o contador de entregas de um dado ultrapassar o número máximo permitido, o dado é tratado como dead letter. O service de fila então aplica a política de dead letter configurada. Por padrão, os dados são enviados para a tail queue.

Tail queue

A tail queue é uma fila auxiliar usada para armazenar dados não enviados aos consumers (como dead letters ou dados de controle personalizados). Trata-se de uma instância de fila dentro do próprio service de fila, com a mesma API disponível. Cada fila de entrada e saída possui sua própria tail queue.

Importante

A tail queue e a fila padrão compartilham o comprimento máximo da fila. Se o comprimento máximo for 10 e a fila padrão ocupar 6 posições, a tail queue poderá ter no máximo 4. Caso a tail queue esteja cheia, tentativas de escrita retornarão um erro de comprimento de fila. Portanto, monitore e limpe a tail queue regularmente.

Ao chamar a API, declare o acesso à tail queue adicionando o seguinte cabeçalho HTTP:

X-EAS-QueueService-Access-Rear: true