CLI · CommandesFiles & flux

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.

eqs mq queues <svc>

Ce que contient le broker. Les flux côté NATS ; refusé côté AMQP, qui ne sait pas lister.

--jsonJSON brut
shell
eqs mq queues events
eqs mq peek <svc> <cible>

Lit des messages sans les consommer — dans la mesure où le broker le permet.

--limit <n>Messages avant troncature (100 par défaut)
shell
eqs mq peek orders dead-letter --limit 5
eqs mq consume <svc> <cible>

Retire les messages. Ils ne reviennent pas.

--limit <n>Combien en retirer
--jsonJSON brut, à rediriger vers un fichier
shell
eqs mq consume orders dead-letter --limit 10 --json > vide.json
eqs mq publish <svc> <cible> <corps>

Dépose un message sur une file ou un subject.

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

Jette tout ce qui s'y trouve. Exige data.ddl.

shell
eqs mq purge orders dead-letter

Jeter un œil n'est pas toujours gratuit

C'est la partie à lire avant de s'en servir en production.

BrokerCe que fait un peek
NATSRien. 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
AMQPIl 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é
Sur AMQP, chaque peek augmente le compteur de livraisons. Tout ce qui surveille les redélivrances voit une tentative, et un consommateur avec une limite de réessais se rapproche d'un cran de l'abandon de ce message. Cela compte surtout sur une dead-letter queue, c'est-à-dire précisément là où l'on utilise peek — la commande affiche donc un avertissement le moment venu, plutôt que de vous laisser l'apprendre par un consommateur qui a renoncé.

Le résultat indique toujours lequel des deux cas s'est produit, pour qu'un script puisse faire la différence.

Permissions

VerbeExigeQui l'a
queues, peekdata.readReader, Contributor, Owner
consume, publishdata.writeContributor, Owner
purgedata.ddlOwner

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.