Ignite CS 模式 java初探

作者: SofiyaJ | 来源:发表于2018-03-26 17:29 被阅读27次

    命令行的形式扩展集群,是不断的增加Server,在实际的很多业务场景中,需要我们用Ignite实现CS模式,本文将提供详细的代码。

    主要maven依赖:

            <dependency>
                <groupId>org.apache.ignite</groupId>
                <artifactId>ignite-core</artifactId>
                <version>${ignite.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.ignite</groupId>
                <artifactId>ignite-spring</artifactId>
                <version>${ignite.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.ignite</groupId>
                <artifactId>ignite-indexing</artifactId>
                <version>${ignite.version}</version>
            </dependency>
    
            <properties>
                   <ignite.version>2.3.0</ignite.version>
            </properties>
    

    代码实现

    Server端实现:

    import com.jc.searchengine.po.Person;
    import org.apache.ignite.Ignite;
    import org.apache.ignite.IgniteCache;
    import org.apache.ignite.IgniteCompute;
    import org.apache.ignite.Ignition;
    import org.apache.ignite.cache.CacheMode;
    import org.apache.ignite.cluster.ClusterGroup;
    import org.apache.ignite.configuration.CacheConfiguration;
    import org.apache.ignite.configuration.IgniteConfiguration;
    
    import java.util.Set;
    
    /**
     * @Author: wangjie
     * @Description:
     * @Date: Created in 10:20 2018/3/23
     */
    public class Application {
    
        public static void main(String[] args) {
    
            Ignite ignite = Ignition.start();
    
            CacheConfiguration cacheCfg = new CacheConfiguration();
            cacheCfg.setName("serverCache");
            cacheCfg.setCacheMode(CacheMode.PARTITIONED);
    
            IgniteCache<Long,Person> cache = ignite.getOrCreateCache(cacheCfg);
    
            ClusterGroup clusterGroup = ignite.cluster().forServers();
    
            cache.put(1L,new Person(1,"Sofiya",2));
            cache.put(2L,new Person(1,"Sofiya",2));
            cache.put(3L,new Person(1,"Sofiya",666666666));
            }
        }
    
    

    Server端的代码实质上主要做了2个操作:

    • 创建一个名叫“serverCache”的缓存区
    • 在缓存区插入数据

    Client 端实现:

    import com.jc.searchengine.po.Person;
    import org.apache.ignite.*;
    import org.apache.ignite.cache.CacheMode;
    import org.apache.ignite.cache.query.ContinuousQuery;
    import org.apache.ignite.cache.query.ScanQuery;
    import org.apache.ignite.cluster.ClusterGroup;
    import org.apache.ignite.configuration.CacheConfiguration;
    import org.apache.ignite.configuration.IgniteConfiguration;
    import org.apache.ignite.internal.util.lang.IgnitePredicate2X;
    import org.apache.ignite.lang.IgniteBiPredicate;
    import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
    import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
    import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
    
    import javax.cache.Cache;
    import java.time.Period;
    import java.util.Arrays;
    
    /**
     * @Author: wangjie
     * @Description:
     * @Date: Created in 10:55 2018/3/23
     */
    
    public class Application{
        public static void main(String[] args) {
    
            //此节点配置为客户端
            Ignition.setClientMode(true);
            IgniteConfiguration cfg = new IgniteConfiguration();
    
            TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
            commSpi.setSlowClientQueueLimit(1000);
    
            TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
            TcpDiscoveryVmIpFinder ipfinder = new TcpDiscoveryVmIpFinder();
            ipfinder.setAddresses(Arrays.asList("localhost"));
            discoverySpi.setIpFinder(ipfinder);
    
            cfg.setCommunicationSpi(commSpi);
            cfg.setDiscoverySpi(discoverySpi);
    
            Ignite ignite = Ignition.start(cfg);
    
            ClusterGroup clusterGroup = ignite.cluster().forClients();
    
          IgniteCache<Long,Person> cache = ignite.getOrCreateCache("serverCache");
            IgniteCompute compute = ignite.compute(clusterGroup);
                compute.broadcast(() -> {
                    Person s1 = cache.get(1L);
                    Person s2 = cache.get(2L);
                    Person s3 = cache.get(3L);
                    System.out.println(s1.toString() + " " + s2.toString() + " " + s3.toString());
                });
        }
    }
    

    Client端的代码做了以下工作:

    • 将此节点配置为客户端模式
    • 获取到刚刚Server段创建的“serverCache”缓存区
    • 将Server端的数据展示出来

    运行程序

    分别启动Server端和Client端的程序,查看控制台:

    Server端:

    Server.png

    Client端:

    Client.png

    项目代码github地址-Server
    项目代码github地址-Client

    程序媛小白一枚,如有错误,烦请批评指正!(#.#)

    相关文章

      网友评论

      本文标题:Ignite CS 模式 java初探

      本文链接:https://www.haomeiwen.com/subject/vysrcftx.html