In un ambiente in cui più applicazioni server ad alto numero di transazioni devono comunicare tra loro, è importante trovare il canale di comunicazione migliore per loro. Un modello editore/sottoscrittore (PubSub) è uno dei modi più popolari quando si tratta di fornire una piattaforma di comunicazione per le proprie applicazioni. Sappiamo tutti cosa hanno in comune questi mezzi; più client pubblicano messaggi e più client possono iscriversi ad essi. Tutto ciò avviene in modo estremamente disaccoppiato, il che significa che l'editore non distribuisce i messaggi direttamente ai client abbonati. Viene invece utilizzato un bus di messaggi come canale intermedio attraverso il quale tutti i client comunicano.
In breve, la messaggistica PubSub è un metodo in cui né l'editore né l'abbonato sanno nulla dell'identità dell'altro.
Prendiamoci un momento per pensare a cosa succede quando il numero di editori e abbonati aumenta. Maggiore è questo numero, maggiore sarà il carico di messaggistica. Questa situazione porta la tua piattaforma PubSub a causare colli di bottiglia in termini di scalabilità, il che vanifica lo scopo principale di introdurre un'interfaccia di messaggistica disaccoppiata.
Diamo un'occhiata a una soluzione che non solo eredita il funzionamento generale di pub/sub, ma aggiunge anche un sacco di altre funzionalità per la tua comodità; un metodo veloce ed estremamente scalabile.
NCache Dettagli NCache Pub/Sotto-documenti Scala Pub/Sub Messaging-Webinar
utilizzando NCache PubSub in memoria
NCache fornisce cache distribuite veloci, flessibili e linearmente scalabili per la tua applicazione .NET.
utilizzando NCache poiché la tua piattaforma PubSub basata sugli eventi può rivelarsi estremamente utile se prevedi di ridimensionare la tua applicazione mentre sei in movimento. Impedisce che si verifichino colli di bottiglia nel sistema.
Ecco come NCache funge da bus di messaggistica per la tua applicazione:
NCache funge da interfaccia intermedia per la tua implementazione Pub/Sub. La figura illustra che non solo uno ma più client possono iscriversi a uno o più argomenti alla volta.
Qualsiasi numero di applicazioni può connettersi alla cache e iniziare a pubblicare messaggi su NCache server. Questi messaggi vengono quindi sottoscritti da vari client in base alle loro esigenze. Attraverso NCache, puoi decidere se tutti o solo un abbonato riceverà i messaggi pubblicati. Facendo così, NCache funge da bus di messaggistica per le applicazioni del server .NET.
NCache Dettagli Pub / Sub NCache Eventi Pub/Sub
Esempio rapido di PubSub con NCache
Supponiamo che io abbia un'applicazione di gioco online utilizzata da giocatori di tutto il mondo. Nella mia applicazione, ho una funzione che incorpora non solo le comunicazioni audio ma anche i messaggi di runtime. Più giocatori inviano messaggi contro un canale e per i giocatori della propria squadra contemporaneamente.
Considerando il numero di giocatori che giocano, il carico di messaggi sarà enorme. Quello di cui ho bisogno qui è un'interfaccia di comunicazione che aumenti le prestazioni del mio gioco. E per questo preferisco NCache come bus di messaggi del mio gioco.
Di seguito è riportato lo snippet che utilizzo per implementare uno scenario in cui le applicazioni server possono pubblicare e ricevere messaggi. Questo codice mostra come ottenere un argomento e pubblicare un messaggio contro di esso.
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); |
Dopo che un messaggio è stato pubblicato su un argomento, gli abbonati creano sottoscrizioni su quell'argomento per ricevere i messaggi. Il codice seguente illustra come sottoscrivere le applicazioni sottoscrivono un determinato argomento per ricevere i messaggi desiderati.
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 Dettagli Pubblica messaggi Iscriviti Messaggi
Fino ad ora, tutto ciò di cui ho parlato è stato il funzionamento generale di pub/sub, ma quello che devi davvero sapere sono le lunghezze extra che NCache va a soddisfare le tue esigenze.
Ti stai chiedendo quali siano quelle "altre funzionalità" che ho esclamato in precedenza? Passiamo subito alle funzionalità offerte in esclusiva da NCache.
Abbonamenti durevoli esclusivi
Normalmente, quando un client si iscrive a un argomento, tale sottoscrizione è nota come sottoscrizione non durevole, il che significa che se il client si disconnette dal server, tutte le relative sottoscrizioni vanno perse.
NCache ti offre abbonamenti duraturi. In questo caso, anche se la connessione tra il server e il client si interrompe, tutte le sottoscrizioni di quel client rimangono intatte. Quindi, quando il client viene riconnesso, riceve tutti i messaggi che sono stati pubblicati mentre l'abbonato è stato disconnesso.
Il modo in cui esegui questo scenario nella tua applicazione è semplice. Aggiungi la seguente riga di codice nella tua applicazione per implementare un abbonamento durevole esclusivo.
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)); |
Finché la connessione è attiva, nessun nuovo client può iscriversi a quell'abbonamento. Se questa connessione si interrompe, i messaggi vengono mantenuti e quando la connessione viene ristabilita, vengono inviati al client. Questo viene fatto in modo che nessun messaggio venga perso.
NCache Dettagli Pub / Sub NCache Abbonamenti durevoli
Abbonamenti durevoli condivisi
Oltre agli abbonamenti esclusivi, la durata può essere raggiunta anche tramite abbonamenti condivisi. In questo tipo di abbonamento, più di un client può abbonarsi a un unico abbonamento. Questo serve allo scopo della condivisione del carico.
Gli abbonamenti condivisi utilizzano il metodo Round Robin per inviare messaggi a tutti i client connessi. Quindi, anche se un client viene disconnesso, i messaggi continuano a essere distribuiti tra i restanti abbonati.
Un abbonamento rimane attivo finché c'è anche un solo client connesso ad esso. Il codice seguente è il modo in cui la mia applicazione di gioco online implementa abbonamenti durevoli condivisi.
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)); |
Per impostazione predefinita, questi abbonamenti sono esclusivi e consentono esattamente un abbonato per abbonamento.
Abbonamenti basati su pattern
A volte, invece di iscriversi alle sottoscrizioni nominative una per una, viene fornito uno schema in base al quale tutti gli argomenti, presenti e futuri, vengono sottoscritti in una volta sola. Per soddisfare questo, NCache facilita i suoi clienti fornendo abbonamenti basati su modelli. Attraverso questo metodo, è possibile iscriversi facilmente a uno o più argomenti che rientrano nello schema fornito.
Per conoscere i tipi di caratteri jolly supportati da NCacheabbonamenti PubSub, fare riferimento a NCache documentazione su Abbonamenti basati su pattern.
Di seguito è riportato un frammento di esempio di come utilizzo i caratteri jolly basati su pattern nella mia applicazione di gioco.
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); |
Perché NCache per PubSub?
Perché favorire NCache, potresti chiedere? Bene… NCache is
- veloce perché è una soluzione in memoria.
- linearmente scalabile perché è possibile aggiungere server aggiuntivi in fase di esecuzione; in qualsiasi momento.
- flessibile in quanto ribilancia automaticamente i dati senza alcun intervento da parte del cliente.
Il modo in cui lo vedo, NCache fornisce il modo migliore, più scalabile e più veloce per accogliere la comunicazione dei messaggi all'interno dell'applicazione. Il fatto che NCache è una soluzione di memorizzazione nella cache distribuita in memoria sufficiente per contrastare eventuali colli di bottiglia che potrebbero sorgere a causa del carico dei messaggi. Ora, questa è la situazione vantaggiosa per tutti di cui hai bisogno nella tua applicazione .NET.