Molte applicazioni oggi necessitano di condividere i dati tra loro in fase di runtime in modo asincrono. Inoltre, i database relazionali non forniscono un meccanismo efficiente di notifica degli eventi e le loro prestazioni e scalabilità rappresentano una delle principali preoccupazioni.
Le code di messaggi forniscono messaggi in sequenza e garantiscono la consegna dei messaggi, ma presentano anche problemi di prestazioni e scalabilità.
Il modo migliore è utilizzare una piattaforma di messaggistica in stile bus di messaggi che sia veloce e scalabile e fornisca anche il coordinamento della condivisione dei dati in stile produttore/consumatore. NCache è una cache distribuita estremamente veloce e scalabile e fornisce anche una funzionalità di messaggistica in stile bus di messaggi semplice e potente.
Con NCache messaggistica, puoi fare quanto segue:
Tutte le applicazioni (sia .NET che Java) collegate NCache può usarlo come piattaforma di messaggistica e propagare eventi attraverso di essa ad altre applicazioni. Oppure possono chiedere alla cache di avvisarli quando accadono determinate cose nella cache.
Gli eventi a livello di cache vengono attivati ogni volta che viene aggiunto, aggiornato o rimosso qualcosa o se la cache viene cancellata dalla cache. Per impostazione predefinita, questi eventi sono disattivati perché possono diventare piuttosto loquaci. Tuttavia, puoi abilitarli alcuni o tutti nella configurazione della cache e quindi fare in modo che la tua applicazione fornisca le funzioni di callback NCache so NCache chiama queste richiamate quando si verificano questi eventi. Di seguito sono riportati i tipi di richiamate che puoi registrare.
CacheEventListener listener = new CacheEventListener();
EnumSet<EventType> _eventType = EnumSet.noneOf(EventType.class);
_eventType.add(EventType.ItemAdded);
_eventType.add(EventType.ItemUpdated);
_eventType.add(EventType.ItemRemoved);
CacheEventDescriptor descripter = _cache.addCacheDataModificationListener(listener,
_eventType, EventDataFilter.None);
Questi eventi vengono attivati in caso di aggiornamenti o rimozioni di elementi specifici, ma solo se uno o più client hanno registrato callback per loro. Di seguito sono riportati gli eventi e le callback a cui è possibile registrarsi.
CacheEventListener listener = new CacheEventListener();
EnumSet<EventType> _eventType = EnumSet.noneOf(EventType.class);
_eventType.add(EventType.ItemUpdated);
_eventType.add(EventType.ItemRemoved);
_cache.addCacheDataModificationListener ("Key:1", listener,
_eventType, EventDataFilter.None);
La query continua è una potente funzionalità di NCache che ti consente di registrare una query simile a SQL con la cache e anche di specificare per quali eventi vorresti che i tuoi callback fossero chiamati da NCache.
NCache quindi crea una query continua nel cluster di cache e monitora tutte le operazioni di aggiunta, aggiornamento e rimozione per verificare se modificano gli elementi memorizzati nella cache che corrispondono a questi criteri di query continua. Se è così, allora NCache informa la tua applicazione client in merito.
Di seguito gli eventi a cui puoi iscriverti.
ContinuousQuery cQuery1 = new ContinuousQuery(qry, indexTable);
ContinuousQueryListener cqListener = new ContinuousQueryListener();
EnumSet _eventType = EnumSet.noneOf(EventType.class);
_eventType.add(EventType.ItemAdded);
_eventType.add(EventType.ItemUpdated);
_eventType.add(EventType.ItemRemoved);
cQuery1.addDataModificationListener(cqListener, _eventType,
EventDataFilter.DataWithMetaData);
NCache consente alle tue applicazioni di coordinarsi con altre in uno scenario produttore/consumatore o pubblicazione/abbonamento. Un'applicazione produce dati e quindi attiva un evento personalizzato in NCache messaggistica e una o più applicazioni sono in attesa di ricevere questo evento.
Ecco come si registra la tua applicazione per ricevere questi eventi personalizzati.
public void OnApplicationEvent(object notifId, object data)
{
...
}
_cache.CustomEvent += new CustomEventCallback(this.OnApplicationEvent);
Ed ecco come la tua applicazione attiva questo evento personalizzato NCache messaggistica.
_cache.RaiseCustomEvent("NotificationID", DateTime.Now);