2016-08-11 13 views
2

以下のイベントリスナーコードを参照してください。リスナーであることを試みる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の場合、イベントは受信されません。 イベントリスナーがイベントを受信するためにサーバーモードになっている必要がある場合は教えてください。それとも私は何か悪いですか?

答えて

1

ローカルリスナーを定義していません(コードにはnull)。リモートフィルタは、イベントが発生した場所で常に実行されます。キャッシュ更新の場合は、サーバーノードの1つです。ローカルリスナーも作成すると、リモートフィルタが返すすべてのイベントtrueがクライアントに伝播されます。

コードサンプルについては、CacheEventsExample [1]を参照してください。

[1] https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheEventsExample.java

+0

こんにちは@Valentin、私はIgniteBiPredicate のインスタンスを作成し、しかし、任意のイベントを取得していないローカル・リスナーとして渡されています。アドバイスをお願いします。 – Sushil

+0

すべてのノード(特にサーバーノード)のイベントを有効にしてください。 –

+0

ignite.batファイルをクリックしてIgniteサーバーを実行し、libフォルダにjarファイルをコピーしました。両方のクライアントがEclipseで実行されているので、同じコードベースを再度使用しています。私がhttp://stackoverflow.com/questions/42729647/apache-ignite-cache-event-registration-not-workingとして尋ねたのと同じ質問。質問を複製して申し訳ありません。 – Sushil

関連する問題