以下のイベントリスナーコードを参照してください。リスナーであることを試みるiSetClientMode = trueの場合、Apache Ignite Event Listenerはリモートイベントを受信しません。
クライアントノード:キャッシュをホスティング
Ignition.setClientMode(true);
IgniteConfiguration cfg = new IgniteConfiguration();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
ipFinder.setAddresses(Arrays.asList("127.0.0.1", "127.0.0.1:47500..47509"));
TcpDiscoverySpi spi = new TcpDiscoverySpi();
spi.setIpFinder(ipFinder);
cfg.setDiscoverySpi(spi);
cfg.setIncludeEventTypes(EventType.EVTS_CACHE);
IgnitePredicate<CacheEvent> rmtLsnr = (CacheEvent cacheEvent) -> {
if(cacheEvent.type() == EventType.EVT_CACHE_OBJECT_PUT) {
System.out.println(cacheEvent.name() + "," + cacheEvent.key());
}
return true;
};
Ignite ignite = Ignition.start(cfg);
ignite.events(ignite.cluster()
.forCacheNodes(TestConstants.IgniteEventsTest.ORDER_CACHE))
.remoteListen(null,rmtLsnr,EventType.EVTS_CACHE);
サーバーノード:
IgniteConfiguration cfg = new IgniteConfiguration();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
ipFinder.setAddresses(Arrays.asList("127.0.0.1", "127.0.0.1:47500..47509"));
TcpDiscoverySpi spi = new TcpDiscoverySpi();
spi.setIpFinder(ipFinder);
cfg.setDiscoverySpi(spi);
Ignite ignite = Ignition.start(cfg);
CacheConfiguration cacheCfg = new CacheConfiguration(TestConstants.IgniteEventsTest.ORDER_CACHE);
cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setWriteSynchronizationMode(FULL_ASYNC);
cacheCfg.setBackups(1);
キャッシュを更新するリモートクライアント:
Ignition.setClientMode(true);
IgniteConfiguration cfg = new IgniteConfiguration();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
ipFinder.setAddresses(Arrays.asList("127.0.0.1", "127.0.0.1:47500..47509"));
TcpDiscoverySpi spi = new TcpDiscoverySpi();
spi.setIpFinder(ipFinder);
cfg.setDiscoverySpi(spi);
Ignite ignite = Ignition.start(cfg);
CacheConfiguration cacheCfg = new CacheConfiguration(TestConstants.IgniteEventsTest.ORDER_CACHE);
cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setWriteSynchronizationMode(FULL_SYNC);
IgniteCache<Integer, Order>
clientOrderCache = ignite.getOrCreateCache(cacheCfg);
in a loop...
clientOrderCache.put(key , order);
イベントリスナーでClientMode = trueの場合、イベントは受信されません。 イベントリスナーがイベントを受信するためにサーバーモードになっている必要がある場合は教えてください。それとも私は何か悪いですか?
こんにちは@Valentin、私はIgniteBiPredicateのインスタンスを作成し、しかし、任意のイベントを取得していないローカル・リスナーとして渡されています。アドバイスをお願いします。 –
Sushil
すべてのノード(特にサーバーノード)のイベントを有効にしてください。 –
ignite.batファイルをクリックしてIgniteサーバーを実行し、libフォルダにjarファイルをコピーしました。両方のクライアントがEclipseで実行されているので、同じコードベースを再度使用しています。私がhttp://stackoverflow.com/questions/42729647/apache-ignite-cache-event-registration-not-workingとして尋ねたのと同じ質問。質問を複製して申し訳ありません。 – Sushil