Muitos aplicativos hoje precisam compartilhar dados entre si em tempo de execução de forma assíncrona. Além disso, os bancos de dados relacionais não fornecem um mecanismo eficiente de notificação de eventos e seu desempenho e escalabilidade são uma grande preocupação.
As filas de mensagens fornecem mensagens sequenciadas e garantem a entrega de mensagens, mas também apresentam problemas de desempenho e escalabilidade.
A melhor maneira é usar uma plataforma de mensagens estilo barramento de mensagens que seja rápida e escalonável e que também forneça coordenação de compartilhamento de dados no estilo produtor/consumidor. NCache é um cache distribuído extremamente rápido e escalonável e também fornece um recurso de mensagens simples e poderoso no estilo de barramento de mensagens.
Com o NCache mensagens, você pode fazer o seguinte:
Todos os aplicativos (sejam .NET ou Java) conectados a NCache pode usá-lo como uma plataforma de mensagens e propagar eventos por meio dele para outros aplicativos. Ou eles podem pedir ao cache para notificá-los quando certas coisas acontecerem no cache.
Os eventos de nível de cache são acionados sempre que algo é adicionado, atualizado ou removido ou se o cache é limpo do cache. Por padrão, esses eventos são desativados porque podem ficar bastante falantes. Mas você pode habilitar alguns ou todos eles na configuração de cache e então fazer com que seu aplicativo forneça funções de retorno de chamada para NCache so NCache chama esses retornos de chamada quando esses eventos ocorrem. Abaixo estão os tipos de retornos de chamada que você pode registrar.
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);
Esses eventos são acionados em atualizações ou remoções de itens específicos, mas somente se um ou mais clientes registraram retornos de chamada para eles. Abaixo estão os eventos e callbacks que você pode registrar.
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);
A Consulta Contínua é um recurso poderoso do NCache que permite registrar uma consulta do tipo SQL com o cache e também especificar para quais eventos você gostaria que seus retornos de chamada fossem chamados por NCache.
NCache em seguida, cria uma Consulta Contínua no cluster de cache e monitora todas as operações de adição, atualização e remoção para ver se elas modificam itens em cache que correspondem a esses critérios de Consulta Contínua. Se sim, então NCache notifica seu aplicativo cliente sobre isso.
Abaixo estão os eventos que você pode se inscrever.
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 permite que seus aplicativos sejam coordenados com outros em um cenário de produtor/consumidor ou de publicação/assinatura. Um aplicativo produz dados e, em seguida, dispara um evento personalizado em NCache mensagens e um ou mais aplicativos estão esperando para receber este evento.
Veja como seu aplicativo se registra para receber esses eventos personalizados.
public void OnApplicationEvent(object notifId, object data)
{
...
}
_cache.CustomEvent += new CustomEventCallback(this.OnApplicationEvent);
E aqui está como seu aplicativo aciona esse evento personalizado em NCache Mensagens.
_cache.RaiseCustomEvent("NotificationID", DateTime.Now);