如今,许多应用程序需要在运行时异步地相互共享数据。而且,关系数据库不提供有效的事件通知机制,其性能和可扩展性是一个主要问题。
消息队列提供有序消息并保证消息传递,但它们也存在性能和可扩展性问题。
最好的方法是使用消息总线风格的消息传递平台,该平台快速且可扩展,并且还提供生产者/消费者风格的数据共享协调。 NCache 是一个极其快速且可扩展的分布式缓存,并且还提供简单而强大的消息总线风格的消息传递能力。
NCache 消息传递,您可以执行以下操作:
连接到的所有应用程序(无论是 .NET 还是 Java) NCache 可以将其用作消息传递平台,并通过它将事件传播到其他应用程序。 或者,他们可以要求缓存在缓存中发生某些事情时通知他们。
每当添加、更新或删除任何内容或从缓存中清除缓存时,都会触发缓存级别事件。 默认情况下,这些事件是关闭的,因为它们会变得很健谈。 但是,您可以在缓存配置中启用部分或全部它们,然后让您的应用程序提供回调函数以 NCache so NCache 当这些事件发生时调用这些回调。 以下是您可以注册的回调类型。
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);
这些事件在特定项目更新或删除时触发,但前提是一个或多个客户端已为它们注册回调。 以下是您可以注册的事件和回调。
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);
连续查询是一个强大的功能 NCache 这允许您向缓存注册类似 SQL 的查询,并指定您希望回调被哪些事件调用 NCache.
NCache 然后在缓存集群中创建一个 Continuous Query 并监控所有的 add、update 和 remove 操作,看看它们是否修改了符合这个 Continuous Query 条件的缓存项。 如果是这样,那么 NCache 通知您的客户端应用程序。
以下是您可以注册的活动。
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 允许您的应用程序在生产者/消费者或发布/订阅场景中与其他应用程序协调。 一个应用程序生成数据,然后将自定义事件触发到 NCache 消息传递和一个或多个应用程序正在等待接收此事件。
以下是您的应用程序如何注册以接收这些自定义事件。
public void OnApplicationEvent(object notifId, object data)
{
...
}
_cache.CustomEvent += new CustomEventCallback(this.OnApplicationEvent);
而且,这就是您的应用程序如何将这个自定义事件触发到 NCache 消息。
_cache.RaiseCustomEvent("NotificationID", DateTime.Now);