今日の多くのアプリケーションは、実行時に非同期で相互にデータを共有する必要があります。また、リレーショナル データベースには効率的なイベント通知メカニズムが備わっておらず、そのパフォーマンスとスケーラビリティが大きな懸念事項となっています。
メッセージ キューは順序付けされたメッセージを提供し、メッセージ配信を保証しますが、パフォーマンスとスケーラビリティの問題もあります。
最良の方法は、高速かつスケーラブルで、プロデューサー/コンシューマー スタイルのデータ共有調整も提供するメッセージ バス スタイルのメッセージング プラットフォームを使用することです。 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);
これらのイベントは、特定のアイテムの更新または削除時に発生しますが、XNUMXつ以上のクライアントがそれらのコールバックを登録している場合に限ります。 以下は、登録できるイベントとコールバックです。
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 次に、キャッシュクラスターに連続クエリを作成し、すべての追加、更新、および削除操作を監視して、この連続クエリ基準に一致するキャッシュアイテムを変更するかどうかを確認します。 もしそうなら、 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 アプリケーションがプロデューサー/コンシューマーまたはパブリッシュ/サブスクライブシナリオで他のアプリケーションと調整できるようにします。 XNUMXつのアプリケーションがデータを生成してから、カスタムイベントを発生させます NCache メッセージングとXNUMXつ以上のアプリケーションがこのイベントの受信を待機しています。
これらのカスタムイベントを受信するためにアプリケーションを登録する方法は次のとおりです。
public void OnApplicationEvent(object notifId, object data)
{
...
}
_cache.CustomEvent += new CustomEventCallback(this.OnApplicationEvent);
そして、これがあなたのアプリケーションがこのカスタムイベントをどのように発生させるかです NCache メッセージング。
_cache.RaiseCustomEvent("NotificationID", DateTime.Now);