CLI · ComandosFilas & streams

Filas & streams

Publicar, inspeccionar e esvaziar mensagens num broker implantado.

eqs mq trabalha contra um broker que instalou pelo marketplace. O mesmo envelope do eqs db — a api guarda as credenciais, verifica a permissão e regista o que correu — e verbos propositadamente diferentes, porque uma fila não tem linhas para consultar.

eqs mq queues <svc>

O que o broker guarda. Streams no NATS; recusado no AMQP, que não consegue listar.

--jsonJSON simples
shell
eqs mq queues events
eqs mq peek <svc> <alvo>

Lê mensagens sem as consumir — até onde o broker permitir.

--limit <n>Mensagens antes de truncar (por omissão 100)
shell
eqs mq peek orders dead-letter --limit 5
eqs mq consume <svc> <alvo>

Retira as mensagens. Não voltam.

--limit <n>Quantas retirar
--jsonJSON simples, para redireccionar para um ficheiro
shell
eqs mq consume orders dead-letter --limit 10 --json > esvaziado.json
eqs mq publish <svc> <alvo> <corpo>

Coloca uma mensagem numa fila ou subject.

shell
eqs mq publish events orders.created '{"id":42}'
eqs mq purge <svc> <alvo>

Descarta tudo o que lá está. Exige data.ddl.

shell
eqs mq purge orders dead-letter

Espreitar nem sempre é de graça

Esta é a parte que vale a pena ler antes de usar em produção.

BrokerO que um peek faz
NATSNada. O JetStream lê a mensagem por sequência e deixa tudo exactamente onde estava. Pode espreitar o mesmo stream o dia todo
AMQPMexe. O protocolo não tem olhar sem tirar: cada mensagem é obtida e devolvida, e o RabbitMQ marca-a como reentregue
No AMQP, cada peek aumenta a contagem de entregas. Tudo o que observe reentregas vê uma tentativa, e um consumidor com limite de tentativas fica uma tentativa mais perto de desistir daquela mensagem. Isto pesa sobretudo numa dead-letter queue, que é justamente onde se recorre ao peek — por isso o comando imprime um aviso quando acontece, em vez de o deixar descobrir pelo consumidor que desistiu.

O resultado indica sempre qual dos dois casos foi o seu, para que um script consiga distinguir.

Permissões

VerboExigeQuem tem
queues, peekdata.readReader, Contributor, Owner
consume, publishdata.writeContributor, Owner
purgedata.ddlOwner

purge não é uma mudança de estrutura, por isso data.ddl pode parecer o lugar errado. É o certo: essa permissão existe porque editar uma linha e eliminar uma tabela não são o mesmo risco, e esvaziar uma fila de produção é do segundo tipo. Um Contributor consegue esvaziar a fila mensagem a mensagem com consume, que devolve o que retirou; o que não consegue é descartar tudo de uma só vez.

O que cada broker não faz

Os dois limites são respondidos pelo nome, e não com um resultado vazio, porque "não tem filas" é uma resposta errada e não uma resposta nula.

  • O AMQP não lista filas. Não faz parte do protocolo — está na API HTTP de gestão do RabbitMQ, noutra porta e com outra credencial. Indique a fila: eqs mq peek <svc> <fila>.
  • O NATS precisa de JetStream para tudo menos publish. O NATS simples não guarda nada: uma mensagem sem subscritor desapareceu, portanto não há o que espreitar, esvaziar ou descartar.

O registo

Todas as operações são registadas: quem correu, contra que broker, que fila e quanto tempo demorou. O corpo das mensagens não, pela mesma razão que os valores de --param no eqs db — é o conteúdo com maior probabilidade de transportar dados pessoais.