RabbitMQ mit Unity-IOC-Container in .NET

9

Ich verwende Unity App Block als meinen IOC-Container für meine Service-Schicht eines WCF-Projekts. Das funktioniert recht gut mit der Unity.WCF-Bibliothek, um es in jeden WCF-Dienst zu stecken.

Ich habe RabbitMQ kürzlich in meine Service-Schicht eingeführt und verwende derzeit die "using" -Blöcke, um eine Verbindung zur Warteschlange herzustellen. Ich mag das aber nicht und versuche, mit HierachicalLifetimeManager meine Verbindung zu RabbitMQ zu erstellen und zu zerstören, so wie ich sie brauche? Klingt das richtig?

Ich suche nach einer Probe oder zumindest nach einer Anleitung zum besten Ansatz? (z. B. sollte ich die Verbindung kapseln und injizieren in jeden Dienst wie benötigt? Wie würde ich RabbitMQ-Consumer usw. verkapseln?)

    
Neil Hosey 01.05.2015, 10:13
quelle

2 Antworten

4

Ich würde empfehlen, die IConnection als Singleton zu registrieren.

Um die IConnection als Singleton in Unity zu registrieren, verwenden Sie ContainerControlledLifetimeManager , z. B.

%Vor%

Die AutorecoveringConnection -Instanz wird, sobald sie zum ersten Mal aufgelöst wurde, am Leben bleiben, bis die besitzende UnityContainer entsorgt wird.

Da wir ConnectionFactory mit Unity registriert haben, wird dies automatisch in den Konstruktor von AutorecoveringConnection eingefügt. Die InjectionMethod stellt sicher, dass beim ersten Auflösen von AutorecoveringConnection die Methode init aufgerufen wird.

Was Ihre Frage betrifft, ob Sie RabbitMQ von Ihren Diensten weg abstrahieren sollten, wäre meine Antwort ja, aber ich würde nicht einfach eine IMessageQueue Abstraktion erstellen. Denken Sie darüber nach, wofür Sie Ihre Nachrichtenwarteschlange verwenden, um Status zu pushen? Wenn ja, haben Sie eine IStatusNotifier -Schnittstelle mit einer konkreten Implementierung für RabbitMQ. Wenn Sie Updates abrufen möchten, verwenden Sie eine IUpdateSource -Schnittstelle mit einer konkreten Implementierung für RabbitMQ. Sie können sehen, wohin ich damit gehe.

Wenn Sie eine Abstraktion für eine Nachrichtenwarteschlange erstellen, beschränken Sie sich auf Funktionen, die nur für alle Message Queue-Implementierungen verfügbar sind. Durch eine unterschiedliche Implementierung von IStatusNotifier für verschiedene Message Queue - Implementierungen können Sie Funktionen nutzen, die für verschiedene Technologien einzigartig sind, und auch flexibel bleiben, falls in Zukunft völlig andere Technologien verwendet werden (z. B. Schreiben in eine SQL - Datenbank oder Ausgabe an eine Konsole).

    
Lukazoid 06.05.2015, 22:46
quelle
1

Mit RabbitMQ möchten Sie Ihre IConnection die ganze Zeit wiederverwendet werden, Sie wollen es nicht in einem "using" -Block. Hier ist meine IOC-Bindung mit Ninject, beachten Sie das InSingletonScope, das ist was Sie wollen.

%Vor%     
jhilden 04.05.2015 13:56
quelle

Tags und Links