Queues & Streams
Nachrichten auf einem bereitgestellten Broker veröffentlichen, ansehen und leeren.
eqs mq arbeitet gegen einen Broker, den Sie über den Marketplace bereitgestellt haben. Dieselbe Hülle wie bei eqs db — die api hält die Zugangsdaten, prüft die Berechtigung und protokolliert, was gelaufen ist — und bewusst andere Verben, denn eine Queue hat keine Zeilen zum Abfragen.
Was der Broker enthält. Streams bei NATS; bei AMQP abgelehnt, das nicht auflisten kann.
eqs mq queues eventsLiest Nachrichten, ohne sie zu konsumieren — soweit der Broker das zulässt.
eqs mq peek orders dead-letter --limit 5
Nimmt Nachrichten herunter. Sie kommen nicht zurück.
eqs mq consume orders dead-letter --limit 10 --json > geleert.json
Legt eine Nachricht auf eine Queue oder ein Subject.
eqs mq publish events orders.created '{"id":42}'Verwirft alles, was darauf liegt. Verlangt data.ddl.
eqs mq purge orders dead-letterHineinschauen ist nicht überall kostenlos
Das ist der Teil, den man vor dem Einsatz in Produktion lesen sollte.
| Broker | Was ein peek bewirkt |
|---|---|
| NATS | Nichts. JetStream liest die Nachricht über ihre Sequenz und lässt sie genau dort, wo sie war. Sie können denselben Stream den ganzen Tag ansehen |
| AMQP | Er fasst sie an. Das Protokoll kennt kein Ansehen ohne Nehmen: jede Nachricht wird geholt und zurückgelegt, und RabbitMQ markiert sie als erneut zugestellt |
Das Ergebnis nennt immer, welcher der beiden Fälle eingetreten ist, damit ein Skript sie unterscheiden kann.
Berechtigungen
| Verb | Verlangt | Wer sie hat |
|---|---|---|
queues, peek | data.read | Reader, Contributor, Owner |
consume, publish | data.write | Contributor, Owner |
purge | data.ddl | Owner |
purge ist keine Strukturänderung, data.ddl mag also nach dem falschen Ort
aussehen. Es ist der richtige: diese Berechtigung existiert, weil eine Zeile zu
ändern und eine Tabelle zu löschen nicht dasselbe Risiko sind — und eine
Produktions-Queue zu leeren gehört zur zweiten Sorte. Ein Contributor kann die
Queue mit consume Nachricht für Nachricht leeren und bekommt zurück, was er
genommen hat; was er nicht kann, ist alles auf einmal wegzuwerfen.
Was der jeweilige Broker nicht kann
Beide Grenzen werden beim Namen genannt statt mit einem leeren Ergebnis beantwortet, denn „Sie haben keine Queues" ist eine falsche Antwort und keine leere.
- AMQP listet keine Queues. Das gehört nicht zum Protokoll — es steckt in
RabbitMQs Management-HTTP-API, auf einem anderen Port hinter einer anderen
Zugangsberechtigung. Nennen Sie die Queue:
eqs mq peek <svc> <queue>. - NATS braucht JetStream für alles außer
publish. Reines NATS speichert nichts: eine Nachricht ohne Abonnenten ist weg, es gibt also nichts anzusehen, zu leeren oder zu verwerfen.
Das Protokoll
Jede Operation wird protokolliert: wer sie ausgeführt hat, gegen welchen Broker,
welche Queue und wie lange sie gedauert hat. Der Inhalt der Nachrichten nicht,
aus demselben Grund wie die --param-Werte bei eqs db — er ist der Teil, der
am ehesten personenbezogene Daten trägt.