In einer Umgebung, in der mehrere serverintensive Anwendungen miteinander kommunizieren müssen, ist es wichtig, den besten Kommunikationskanal für sie zu finden. Ein Publisher/Subscribe-Modell (PubSub) ist eine der beliebtesten Methoden, wenn es darum geht, eine Kommunikationsplattform für Ihre Anwendungen bereitzustellen. Wir alle wissen, was diese Medien gemeinsam haben; Mehrere Clients veröffentlichen Nachrichten und mehrere Clients können sie abonnieren. Dies geschieht alles auf äußerst entkoppelte Weise, was bedeutet, dass der Herausgeber die Nachrichten nicht direkt an die abonnierenden Clients weiterleitet. Stattdessen wird ein Nachrichtenbus als Zwischenkanal verwendet, über den alle Clients kommunizieren.
Kurz gesagt ist PubSub-Messaging eine Methode, bei der weder der Herausgeber noch der Abonnent etwas über die Identität des anderen wissen.
Nehmen wir uns hier einen Moment Zeit, um darüber nachzudenken, was passiert, wenn die Anzahl der Publisher und Abonnenten steigt. Je größer diese Zahl ist, desto größer wird die Nachrichtenlast sein. Diese Situation führt dazu, dass Ihre PubSub-Plattform Skalierbarkeitsengpässe verursacht, was den Hauptzweck der Einführung einer entkoppelten Messaging-Schnittstelle zunichte macht.
Schauen wir uns eine Lösung an, die nicht nur die allgemeine Funktionsweise von Pub/Sub übernimmt, sondern zu Ihrer Vereinfachung auch eine Reihe anderer Funktionalitäten hinzufügt. eine Methode, die schnell und äußerst skalierbar ist.
NCache Details NCache Pub/Sub-Docs Scale Pub/Sub Messaging-Webinar
Die richtigen NCache In-Memory-PubSub
NCache bietet Ihnen schnelle, flexible und höchst linear skalierbare verteilte Caches für Ihre .NET-Anwendung.
Die richtigen NCache denn Ihre ereignisgesteuerte PubSub-Plattform kann sich als äußerst nützlich erweisen, wenn Sie planen, Ihre Anwendung unterwegs zu skalieren. Es verhindert, dass es in Ihrem System zu Engpässen kommt.
Hier ist wie NCache fungiert als Messaging-Bus für Ihre Anwendung:
NCache fungiert als Zwischenschnittstelle für Ihre Pub/Sub-Implementierung. Die Abbildung verdeutlicht, dass nicht nur ein, sondern mehrere Clients gleichzeitig ein oder mehrere Themen abonnieren können.
Beliebig viele Anwendungen können eine Verbindung zum Cache herstellen und mit der Veröffentlichung von Nachrichten beginnen NCache Server. Diese Nachrichten werden dann von verschiedenen Clients entsprechend ihren Anforderungen abonniert. Durch NCachekönnen Sie entscheiden, ob alle oder nur ein Abonnent die veröffentlichten Nachrichten erhalten soll. Dadurch NCache fungiert als Messaging-Bus für Ihre .NET-Serveranwendungen.
NCache Details Pub / Sub NCache Pub/Sub-Veranstaltungen
Schnelles PubSub-Beispiel mit NCache
Nehmen wir an, ich habe eine Online-Gaming-Anwendung, die von Spielern auf der ganzen Welt verwendet wird. In meiner Anwendung habe ich eine Funktion, die nicht nur Audiokommunikation, sondern auch Laufzeitnachrichten integriert. Mehrere Spieler senden gleichzeitig Nachrichten an einen Kanal und für ihre eigenen Teamspieler.
Angesichts der Anzahl der Spieler, die das Spiel spielen, wird die Nachrichtenlast enorm sein. Was ich hier brauche, ist eine Kommunikationsschnittstelle, die die Leistung meines Spiels steigert. Und dafür bevorzuge ich NCache als Nachrichtenbus meines Spiels.
Im Folgenden finden Sie den Ausschnitt, den ich verwende, um ein Szenario zu implementieren, in dem Serveranwendungen Nachrichten veröffentlichen und empfangen können. Dieser Code zeigt, wie Sie ein Thema erhalten und eine Nachricht dazu veröffentlichen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create the object to be sent in message // Get information of the player through player ID Player teamLeader = FetchInfo(1); // Create the message var newChatMessage = new Message(teamLeader); // Set the expiration time of the message newChatMessage.ExpirationTime = TimeSpan.FromSeconds(60); // Publish the message with delivery option set to All subscribers teamChat.Publish(newChatMessage, DeliveryOption.All, true); |
Sobald eine Nachricht für ein Thema veröffentlicht wurde, erstellen die Abonnenten Abonnements für dieses Thema, um Nachrichten zu empfangen. Der folgende Code zeigt, wie abonnierende Anwendungen ein bestimmtes Thema abonnieren, um gewünschte Nachrichten zu empfangen.
1 2 3 4 5 6 7 8 9 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create and register subscribers for the topic // MessageReceived is the callback through which the message is delivered ITopicSubscription subscriber = teamChat.CreateSubscription(MessageReceived); |
NCache Details Nachrichten veröffentlichen Nachrichten abonnieren
Bisher habe ich nur über die allgemeine Funktionsweise von Pub/Sub gesprochen, aber was Sie wirklich wissen müssen, sind die zusätzlichen Längen NCache geht auf Ihre Bedürfnisse ein.
Fragen Sie sich, was diese „anderen Funktionalitäten“ sind, die ich zuvor genannt habe? Kommen wir gleich zu den Funktionen, die exklusiv von angeboten werden NCache.
Exklusive dauerhafte Abonnements
Wenn ein Client ein Thema abonniert, wird dieses Abonnement normalerweise als nicht dauerhaftes Abonnement bezeichnet. Das bedeutet, dass alle Abonnements verloren gehen, wenn der Client die Verbindung zum Server trennt.
NCache bietet Ihnen dauerhafte Abonnements. In diesem Fall bleiben alle Abonnements dieses Clients intakt, selbst wenn die Verbindung zwischen dem Server und dem Client unterbrochen wird. Wenn der Client also wieder verbunden wird, empfängt er alle Nachrichten, die veröffentlicht wurden, während die Verbindung des Abonnenten getrennt wurde.
Die Art und Weise, wie Sie dieses Szenario in Ihrer Anwendung ausführen, ist einfach. Sie fügen Ihrer Anwendung die folgende Codezeile hinzu, um ein exklusives dauerhaftes Abonnement zu implementieren.
1 2 3 4 5 6 7 8 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Exclusive IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Exclusive, MessageReceived, TimeSpan.FromMinutes(20)); |
Solange die Verbindung besteht, kann kein neuer Client dieses Abonnement abonnieren. Wenn diese Verbindung abbricht, bleiben die Nachrichten erhalten und werden bei erneutem Verbindungsaufbau an den Client gesendet. Dies geschieht, damit keine Nachricht verloren geht.
NCache Details Pub / Sub NCache Dauerhafte Abonnements
Geteilte dauerhafte Abonnements
Neben exklusiven Abonnements kann die Haltbarkeit auch durch gemeinsame Abonnements erreicht werden. Bei dieser Art von Abonnement können mehrere Kunden ein einzelnes Abonnement abonnieren. Dies dient der Lastverteilung.
Geteilte Abonnements verwenden die Round-Robin-Methode, um Nachrichten an alle verbundenen Clients zu senden. Selbst wenn ein Client getrennt wird, werden die Nachrichten weiterhin an die verbleibenden Abonnenten verteilt.
Ein Abonnement bleibt so lange aktiv, wie auch nur ein einziger Client damit verbunden ist. Der folgende Code zeigt, wie meine Online-Gaming-Anwendung gemeinsame dauerhafte Abonnements implementiert.
1 2 3 4 5 6 7 8 9 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Shared IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Shared, MessageReceived, TimeSpan.FromMinutes(20)); |
Standardmäßig sind diese Abonnements exklusiv und erlauben genau einen Abonnenten pro Abonnement.
Musterbasierte Abonnements
Anstatt benannte Abonnements einzeln zu abonnieren, wird manchmal ein Muster bereitgestellt, nach dem alle aktuellen und zukünftigen Themen auf einmal abonniert werden. Um dem Rechnung zu tragen, NCache erleichtert seinen Kunden die Bereitstellung musterbasierter Abonnements. Mit dieser Methode können ein Thema oder mehrere Themen, die unter das bereitgestellte Muster fallen, problemlos abonniert werden.
Um zu wissen, welche Arten von Platzhaltern unterstützt werden NCacheDie PubSub-Abonnements von finden Sie hier NCache Dokumentation zu Musterbasierte Abonnements.
Im Folgenden finden Sie einen Beispielausschnitt dafür, wie ich musterbasierte Platzhalter in meiner Spieleanwendung verwende.
1 2 3 4 5 6 |
// Only ? * [] wildcards supported string topicName = "team*"; string subscriptionName = "TeamPlayersComms"; // Get the topic ITopic teamChat = cache.MessagingService.GetTopic(topicName, TopicSearchOptions.ByPattern); |
Warum NCache für PubSub?
Warum bevorzugen NCache, könnten Sie fragen? Also… NCache is
- schnell, da es sich um eine In-Memory-Lösung handelt.
- linear skalierbar, da Sie zur Laufzeit weitere Server hinzufügen können; jederzeit.
- Flexibel, da die Daten ohne Eingreifen des Kunden dynamisch und automatisch neu ausgeglichen werden.
Wie ich es sehe, NCache bietet die beste, skalierbarste und schnellste Möglichkeit, die Nachrichtenkommunikation innerhalb Ihrer Anwendung zu integrieren. Die Tatsache, dass NCache ist eine In-Memory-Lösung mit verteiltem Caching, die ausreicht, um eventuellen Engpässen aufgrund der Nachrichtenlast entgegenzuwirken. Dies ist nun die Win-Win-Situation, die Sie in Ihrer .NET-Anwendung benötigen.