Filas & streams
Publicar, inspecionar e drenar mensagens num broker implantado.
eqs mq trabalha contra um broker que você subiu pelo marketplace. Mesmo envelope do eqs db — a api guarda as credenciais, confere a permissão e registra o que rodou — e verbos propositalmente diferentes, porque uma fila não tem linhas para consultar.
O que o broker guarda. Streams no NATS; recusado no AMQP, que não sabe listar.
eqs mq queues eventsLê mensagens sem consumi-las — até onde o broker permitir.
eqs mq peek orders dead-letter --limit 5
Tira as mensagens. Elas não voltam.
eqs mq consume orders dead-letter --limit 10 --json > drenado.json
Coloca uma mensagem numa fila ou subject.
eqs mq publish events orders.created '{"id":42}'Descarta tudo o que está ali. Exige data.ddl.
eqs mq purge orders dead-letterEspiar nem sempre sai de graça
Esta é a parte que vale ler antes de usar em produção.
| Broker | O que um peek faz |
|---|---|
| NATS | Nada. O JetStream lê a mensagem por sequência e deixa tudo exatamente onde estava. Dá para espiar o mesmo stream o dia inteiro |
| AMQP | Mexe. O protocolo não tem olhar sem tirar: cada mensagem é buscada e devolvida, e o RabbitMQ marca como reentregue |
O resultado sempre informa qual dos dois casos foi o seu, então um script consegue distinguir.
Permissões
| Verbo | Exige | Quem tem |
|---|---|---|
queues, peek | data.read | Reader, Contributor, Owner |
consume, publish | data.write | Contributor, Owner |
purge | data.ddl | Owner |
purge não é mudança de estrutura, então data.ddl pode parecer o lugar
errado. É o certo: essa permissão existe porque editar uma linha e derrubar uma
tabela não são o mesmo risco, e esvaziar uma fila de produção é do segundo tipo.
Um Contributor consegue drenar a fila mensagem a mensagem com consume, que
devolve o que tirou; o que ele não consegue é descartar tudo de uma vez.
O que cada broker não faz
Os dois limites são respondidos pelo nome, e não com um resultado vazio, porque "você não tem filas" é uma resposta errada, não uma resposta nula.
- AMQP não lista filas. Isso não faz parte do protocolo — está na API HTTP
de management do RabbitMQ, noutra porta e com outra credencial. Diga o nome da
fila:
eqs mq peek <svc> <fila>. - NATS precisa de JetStream para tudo menos
publish. O NATS puro não guarda nada: uma mensagem sem assinante simplesmente sumiu, então não há o que espiar, drenar ou descartar.
O registro
Toda operação é registrada: quem rodou, contra qual broker, qual fila e quanto
tempo levou. O corpo das mensagens não, pelo mesmo motivo dos valores de
--param no eqs db — é o conteúdo mais provável de carregar dado pessoal.