Automatisch verbindet, RabbitMQ-Kanäle
Fand ich dieses Kleinod:
In der Ausfall der Verbindung, der client zum herstellen einer neuen Verbindung zum broker. Alle Kanäle geöffnet, die auf der vorherigen Verbindung wird automatisch geschlossen, und diese wird wieder der öffnung zu.
So, dass ist nicht gut. Ich bin zu gehen schreiben einer großen Schicht der Handhabung automatische Verbindung wiederherstellt und neu die Kanäle Kapseln dies geschieht aus alle von meinem code. Problem ist, sollte dies bereits geschehen sein. Ist das möglich in der Java-RMQ-Bibliotheken?
- Ich bin nicht sicher, ob ich dem Folgen, was das problem ist hier in Bezug auf die Kanäle. Sie sind wie verbindungen lite. Also, wenn Sie unterbrochen wird, dann verlieren Sie Ihre Kanäle auch.
- Haben Sie jemals herausfinden? Oder haben Sie schreiben Ihre automatischen re-Verbindung-Schicht? Jede chance, Sie werden es teilen?
- Ich schrieb einen sehr kludgey Wiederanschluss Schicht. Es ist nicht besonders leicht für mich zu open source an dieser Stelle, aber ich würde Sie gerne beraten - post eine Frage an die Programmierer.SE bittet um Hilfe bei der Gestaltung dieser Ebene, und ich werde Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out Lyra: Eine hohe Verfügbarkeit RabbitMQ-client, der automatisch gewinnt Ressourcen (verbindungen/Kanäle/Verbraucher), wenn Sie unerwartet geschlossen.
Vielleicht ist das ein neues feature der RabbitMQ-client, aber ich fand diese in Ihre docs:
https://www.rabbitmq.com/api-guide.html
Sieht aus wie es das problem lösen sollte.
Als der RabbitMQ 3.3.0 (April 2014) ist dies möglich mit Java-clients.
Ich weiß nicht, ob dies ist ein nur-server-änderung, eine änderung der client-Bibliotheken nur, dass dies möglich macht, etc. Immer noch recherchieren.
Ja, ich Stimme zu, dies ist ein großer Nachteil der aktuellen RabbitMQ-client-Implementierungen. Ich habe mit RMQ-für über 2 Jahre jetzt (das .NET-Bibliothek), und hat sich nicht viel verändert in dieser Zeit. Es muss komplett neu geschrieben von Grund auf und ich habe einfach nicht die Zeit hatte, es zu tun noch.
Aber ich habe einige Hinweise. Zunächst, ich würde eine wrapper-Klasse für die Verbindung/Kanal-Objekt (Sie müssen den Kanal zu tun, AMQP-Operationen, die einzige Sache, die die Verbindung verwendet wird, ist die Schaffung von Kanälen). Dann, Ihre wrapper-Klasse können Sie verfolgen, ob es der Kanal oder die Verbindung geöffnet ist, und entsprechend handeln.
Mein code endet auf der Suche wie diese:
Meiner endgültigen plan zu abstrahieren, auch diese Sachen Weg, und erstellen Sie eine völlig neue Art der Interaktion mit dem RabbitMQ (oder jede andere messaging) Bibliothek. Ich werde Sie wissen lassen, wenn ich habe mittlerweile einige arbeiten getan, könnte es ein paar Monate.