2017-03-28 50 views
1

我期待公开Apache Ignite Cache并且客户端应用程序可以访问相同的内容。我可以在Apache Ignite版本1.9中看到连续查询支持 - https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheContinuousAsyncQueryExample.javaApache Ignite:连续SQLFieldQuery

但是,我无法找到任何示例如何实现连续SQLFieldQuery。

public static void main(String[] args) throws Exception { 
     System.out.println("Run Spring example!!"); 
     Ignition.setClientMode(true); 
     IgniteConfiguration cfg = new IgniteConfiguration(); 
     cfg.setIncludeEventTypes(EVTS_CACHE); 
     cfg.setPeerClassLoadingEnabled(true); 
     TcpDiscoveryMulticastIpFinder discoveryMulticastIpFinder = new TcpDiscoveryMulticastIpFinder(); 
     Set<String> set = new HashSet<>(); 

     set.add("serverhost:47500..47509"); 
     discoveryMulticastIpFinder.setAddresses(set); 

     TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi(); 
     discoverySpi.setIpFinder(discoveryMulticastIpFinder); 

     cfg.setDiscoverySpi(discoverySpi); 

     cfg.setPeerClassLoadingEnabled(true); 
     cfg.setIncludeEventTypes(EVTS_CACHE); 
     Ignite ignite = Ignition.start(cfg); 

     CacheConfiguration<String, BinaryObject> cacheConfiguration = new CacheConfiguration<>(CACHE_NAME); 


     IgniteCache<String, BinaryObject> cache = ignite.getOrCreateCache(cacheConfiguration).withKeepBinary(); 


     QueryCursor<List<?>> query = cache.query(new SqlFieldsQuery("select Field1 from table1 where Field1='TEST'")); 
      List<List<?>> all = query.getAll(); 
      for (List<?> l : all) { 
       System.out.println(l); 
      } 


    } 

回答

2

连续查询仅基于谓词,SQL在此不受支持。您可以提供一个远程过滤器,将在服务器端每次更新时调用该过滤器。所有满足过滤器的更新都将被批量处理并发送到调用本地监听器的订阅者。

详情请参阅此页:https://apacheignite.readme.io/docs/continuous-queries