Wir haben eine Wrapper-Bibliothek um RabbitMQ an meinem Arbeitsplatz, erstellt von jemandem, der hier nicht mehr arbeitet. Ich entwerfe ein neues System mit Rabbit und erarbeite den besten Ansatz, um Warteschlangen, Austausch und Bindungen zu deklarieren. Unsere Rabbit-Architektur hat ein paar globale Zonen, und jede Zone hat mehrere Rabbit-Knoten.Wann queues and exchanges mit RabbitMQ zu deklarieren/binden ist
Der Wrapper-Code zum Veröffentlichen von Nachrichten und Abonnieren von Warteschlangen deklariert die relevanten Austauschvorgänge, Warteschlangen und Bindungen jedes Mal neu. Meine Sorge ist, dass dies zu einer beträchtlichen Latenz bei jeder Nachrichtenveröffentlichung führen kann, insbesondere wenn es auf eine Bestätigung warten muss, dass die Warteschlange/der Austausch in den entfernten globalen Zonen existiert. Ich erwarte, dass der Benchmark von Millionen von Nachrichten pro Sekunde den Austausch für jede Veröffentlichung nicht erneut deklariert.
Kurz gesagt, dieser Ansatz scheint ein wenig verschwenderisch und paranoid zu mir, aber vielleicht fehlt mir etwas. So
Ich habe ein paar Fragen:
- Ist erneut erklärt, die Warteschlangen und tauscht eine erhebliche Performance-Einbußen, da globale Föderation?
- Re-Deklaration bei jeder Verwendung ein guter Ansatz, weil es Warteschlangen/Austauschvorgänge behandelt, die aufgrund von Broker-Neustarts oder expliziter Löschung verschwinden?
- Sollten wir nur Warteschlangen und Austausch pro Prozess einmal erklären und erwarten, dass sie die gesamte Lebensdauer dauern?
- Sollen dauerhafte Austauschvorgänge und Warteschlangen in Rabbit-Konfiguration deklariert und von den Anwendungen überhaupt nicht deklariert werden?
- Wie sollten Konfigurationsänderungen für Warteschlangen/Austauschvorgänge gehandhabt werden, wenn Anwendungen sie weiterhin mit alter Konfiguration deklarieren können? Sollten Anwendungen den Deklarationsfehler nur behandeln und weiter veröffentlichen/konsumieren?
Danke für Ihre gründliche Antwort –