TL;DR
No RabbitMQ, rabbitmqctl list_queues dentro do pod do broker mostra mensagens e consumidores por fila; a API de gerenciamento (porta 15672) dá o mesmo sem acesso ao pod. No Azure Service Bus, az servicebus queue show com --query countDetails mostra os contadores, e o que interessa é ActiveMessageCount. Em qualquer um, olhe o número junto com a quantidade de consumidores: fila crescendo com consumidores é consumidor lento; fila crescendo sem consumidor é consumidor parado.
RabbitMQ
rabbitmqctl, de dentro do pod do broker
kubectl -n loja exec deploy/rabbitmq -- rabbitmqctl list_queues name messages consumers Listing queues for vhost / ...
name messages consumers
pedidos 45 0 Sem acesso ao pod do broker, a API de gerenciamento responde o mesmo. Um port-forward para a porta 15672 e uma chamada:
kubectl -n loja port-forward svc/rabbitmq 15672:15672
curl -s -u usuario:senha http://localhost:15672/api/queues/%2F/pedidos \
| jq '{messages, messages_ready, messages_unacknowledged, consumers}' Azure Service Bus
O Service Bus fica fora do cluster, então a consulta é pela CLI do Azure. O comando e o formato vêm da documentação da Microsoft ("Get message counters"); não o executamos neste guia.
az servicebus queue show \
--resource-group GRUPO \
--namespace-name NAMESPACE \
--name pedidos \
--query countDetails A resposta traz ActiveMessageCount, DeadLetterMessageCount, ScheduledMessageCount e os contadores de transferência. ActiveMessageCount é o que está esperando para ser entregue.
O que o número quer dizer
| Fila | Consumidores | Leitura |
|---|---|---|
| crescendo | 0 | consumidor parado ou sem réplicas: veja o Deployment e os pods |
| crescendo | 1 ou mais | consumidor mais lento que a produção: escale ou otimize |
| estável e alta | 1 ou mais | equilíbrio num patamar alto: atraso constante para quem espera |
| unacknowledged alto | 1 ou mais | consumidor pegou e não confirmou: travado ou lento no processamento |
Perguntas frequentes
Mensagens na fila e mensagens não confirmadas são a mesma coisa?
Não. No RabbitMQ, messages_ready são as que esperam um consumidor, e messages_unacknowledged as que um consumidor pegou e ainda não confirmou. Fila com ready zero e unacknowledged alto é consumidor lento ou travado, não falta de consumidor.
Qual contador do Service Bus usar?
ActiveMessageCount, que a documentação da Microsoft define como as mensagens prontas para entrega. DeadLetterMessageCount alto é outro problema: mensagens que falharam além do limite de tentativas.
Como sei qual fila um pod consome?
Pela configuração do próprio container: as variáveis de ambiente com o nome da fila e a conexão. É isso que o Kubepier lê para mostrar a fila e o tamanho de cada pod.