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.
O que o broker guarda. Streams no NATS; recusado no AMQP, que não consegue listar.
eqs mq queues eventsLê mensagens sem as consumir — até onde o broker permitir.
eqs mq peek orders dead-letter --limit 5
Retira as mensagens. Não voltam.
eqs mq consume orders dead-letter --limit 10 --json > esvaziado.json
Coloca uma mensagem numa fila ou subject.
eqs mq publish events orders.created '{"id":42}'Descarta tudo o que lá está. Exige data.ddl.
eqs mq purge orders dead-letterEspreitar nem sempre é de graça
Esta é a parte que vale a pena 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 exactamente onde estava. Pode espreitar o mesmo stream o dia todo |
| AMQP | Mexe. O protocolo não tem olhar sem tirar: cada mensagem é obtida e devolvida, e o RabbitMQ marca-a como reentregue |
O resultado indica sempre qual dos dois casos foi o seu, para que um script consiga 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 é 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.