Files & flux
Publier, inspecter et vider des messages sur un broker déployé.
eqs mq s'adresse à un broker que vous avez déployé depuis la marketplace. Même enveloppe que eqs db — l'api détient les identifiants, vérifie la permission et enregistre ce qui a été exécuté — et des verbes volontairement différents, parce qu'une file n'a pas de lignes à interroger.
Ce que contient le broker. Les flux côté NATS ; refusé côté AMQP, qui ne sait pas lister.
eqs mq queues eventsLit des messages sans les consommer — dans la mesure où le broker le permet.
eqs mq peek orders dead-letter --limit 5
Retire les messages. Ils ne reviennent pas.
eqs mq consume orders dead-letter --limit 10 --json > vide.json
Dépose un message sur une file ou un subject.
eqs mq publish events orders.created '{"id":42}'Jette tout ce qui s'y trouve. Exige data.ddl.
eqs mq purge orders dead-letterJeter un œil n'est pas toujours gratuit
C'est la partie à lire avant de s'en servir en production.
| Broker | Ce que fait un peek |
|---|---|
| NATS | Rien. JetStream lit le message par séquence et le laisse exactement où il était. Vous pouvez regarder le même flux toute la journée |
| AMQP | Il y touche. Le protocole ne sait pas regarder sans prendre : chaque message est récupéré puis remis, et RabbitMQ le marque comme redélivré |
Le résultat indique toujours lequel des deux cas s'est produit, pour qu'un script puisse faire la différence.
Permissions
| Verbe | Exige | Qui l'a |
|---|---|---|
queues, peek | data.read | Reader, Contributor, Owner |
consume, publish | data.write | Contributor, Owner |
purge | data.ddl | Owner |
purge n'est pas un changement de structure, alors data.ddl peut sembler mal
choisi. C'est pourtant le bon : cette permission existe parce que modifier une
ligne et supprimer une table ne présentent pas le même risque, et vider une file
de production relève du second cas. Un Contributor peut vider la file message
par message avec consume, qui rend ce qu'il a pris ; ce qu'il ne peut pas,
c'est tout jeter d'un coup.
Ce que chaque broker ne sait pas faire
Les deux limites sont annoncées nommément, et non par un résultat vide, parce que « vous n'avez aucune file » est une réponse fausse et non une réponse nulle.
- AMQP ne liste pas les files. Ce n'est pas dans le protocole — cela vit
dans l'API HTTP de gestion de RabbitMQ, sur un autre port et derrière un autre
identifiant. Nommez la file :
eqs mq peek <svc> <file>. - NATS a besoin de JetStream pour tout sauf
publish. NATS seul ne stocke rien : un message sans abonné a disparu, il n'y a donc rien à regarder, à vider ni à jeter.
La trace
Chaque opération est enregistrée : qui l'a lancée, sur quel broker, quelle file
et combien de temps elle a pris. Le corps des messages, non, pour la même raison
que les valeurs --param dans eqs db — c'est le contenu le plus susceptible
de porter des données personnelles.