2014-01-29 11 views
7

Ich habe eine Dienstanwendung, die so ziemlich wie eine SignalR Backplane funktioniert, also dachte ich, es wäre eine gute Idee, meine eigene IMessageBus Implementierung zu erstellen, um mit dem Backend zu sprechen, anstatt mein eigenes Ding auszurollen. Das Problem ist, dass ich nicht viele Informationen über diesen Vertrag finden kann. Obwohl ich mir den Code angesehen habe (der sehr gut aussieht), habe ich Probleme, einige Konzepte zu verstehen.Basic SignalR IMessageBus Implementierung

public interface IMessageBus 
{ 
    Task Publish(Message message); 
    IDisposable Subscribe(ISubscriber subscriber, string cursor, Func<MessageResult, object, Task<bool>> callback, int maxMessages, object state); 
} 
  1. Task Publish(Message message);

Das ist einfach, im Grunde muss es eine Nachricht an das Backend senden. Ich mache mir deswegen keine Sorgen, weil meine App von Server zu Client unidirektional ist.

  1. IDisposable Subscribe(ISubscriber subscriber, string cursor, Func<MessageResult, object, Task<bool>> callback, int maxMessages, object state);

    • return: Trotz IDisposable zu sagen, ich habe es immer ein Abonnement-Objekt zurück gesehen, aber warum IDisposable?
    • subscriber identifiziert eine Verbindung. Diese Verbindung kann Gruppen abonnieren oder abbestellen.
    • cursor: ist die letzte empfangene Nachrichten-ID.
    • callback: Wann wird dieser Rückruf ausgeführt?
    • state: was genau ist das?

Kann jemand mir erklären, wie diese Methode?

Antwort

1

würde ich empfehlen, von ScaleoutMessageBus (https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.messaging.scaleoutmessagebus(v=vs.111).aspx)

Es bietet eine Abstraktion und kapselt alle Abonnementverwaltung erben, so ist es möglich, auf einer Rückebene Umsetzung zu konzentrieren.

Sie können auch einen Blick auf Redis Basisimplementierung (https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Redis/RedisMessageBus.cs) als Beispiel.

Wenn es interessant SignalR ist Open Source, so dass Sie auch bei ScaleoutMessageBus Umsetzung aussehen kann (https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Messaging/ScaleoutMessageBus.cs)

Hoffnung, das hilft.