第一个基于Apache Ignite的应用

翻译:吴嘉俊,叩丁狼高级讲师。

在本文中,我们会通过创建第一个Ignite应用,用于从分布式的缓存中存放/获取值,来进一步了解Ignite的使用。在第一个例子中,我们尽可能的用最简单的代码来展示如何在Java应用中操作Apache Ignite集群的数据。

本文的应用可以从GitHub中clone(https://github.com/srecon/the-apache-ignite-book/tree/master/chapters/chapter-2)

按照以下流程执行:

  1. 启动你的Ignite节点。

  2. 创建一个Maven项目。

  3. 编译应用。
  4. 运行应用。

我们一步一步来操作:

  • 第一步

启动一个Apache Ignite节点。使用以下命令:

$ IGNITE_HOME/bin/ignite.sh
  • 第二步

创建一个Maven项目,当然可以从你熟悉的IDE创建,或者执行以下命令:

mvn archetype:generate -DartifactId=chapter-two -DgroupId=com.blu.imdg -DarchetypeArtifac\ tId=maven-archetype-quickstart -DinteractiveMode=false

上面的命令创建了一个charpter-two的文件夹。在这个文件夹下,你可以看到如下的项目结构:

image.png

在src/main/java文件夹下是项目的代码文件,src/test/java下包含了项目的测试代码,pom.xml文件是maven的配置管理文件。在pom.xml文件中包含了项目的依赖,构建等关键配置信息。pom.xml文件是很复杂的,但是对我们接下来要做的事情,不是必须理解的。

  • 第三步

在pom.xml文件中添加一下项目依赖:

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

在pom.xml文件中的properties节点中添加定义的变量值:

<properties> 
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
<ignite.version>2.4.0</ignite.version>
</properties>

你可以通过maven的命令来启动应用。当然,你也可以构建一个可执行的jar文件,包含应用所需的类,依赖,代码等等,这种方式对于在不同环境下部署,运行应用是非常方便的。为了构建jar包,我们需要在pom.xml中添加一些插件:

<build>
    <plugins>
        <plugin>
            <groupId>com.jolira</groupId>
            <artifactId>onejar-maven-plugin</artifactId>
            <version>1.4.4</version>
            <executions>
                <execution>
                    <id>build-query</id>
                    <configuration>
                        <mainClass>com.blu.imdg.HelloIgnite</mainClass>
                        <attachToBuild>true</attachToBuild>
                        <classifier>onejar</classifier>
                        <filename>HelloIgnite-runnable.jar</filename>
                    </configuration>
                    <goals>
                        <goal>one-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • 第四步

在src/main/java/com/blu/imdg文件夹下,添加我们的代码:

package com.blu.imdg;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder

public class HelloIgnite {
    public static void main(String[] args) {
        System.out.println("Hello Ignite");
        // create a new instance of TCP Discovery SPI
        TcpDiscoverySpi spi = new TcpDiscoverySpi();
        // create a new instance of tcp discovery multicast ip finder TcpDiscoveryMulticastIpFinder tcMp = new TcpDiscoveryMulticastIpFinder(); tcMp.setAddresses(Arrays.asList("localhost")); // change your IP address here // set the multi cast ip finder for spi
        spi.setIpFinder(tcMp);
        // create new ignite configuration
        IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setClientMode(true);
        // set the discovery spi to ignite configuration 
        cfg.setDiscoverySpi(spi);
        // Start ignite
        Ignite ignite = Ignition.start(cfg);
        // get or create cache
        IgniteCache < Integer, String > cache = ignite.getOrCreateCache("HelloWorld"); // put some cache elements
        for (int i = 1; i <= 100; i++) { 
        cache.put(i, Integer.toString(i)); } 
        // get them from the cache and write to the console 
        for (int i = 1; i <= 100; i++) { System.out.println("Cache get:" + cache.get(i)); 
        } 
        // close ignite instance
        ignite.close(); 
    }

}

代码非常简单。我们来看看这个代码的每个部分。在main方法中,首先我们创建了一个TCP Discovery SPI,并且设置了一个广播IP地址;

紧接着,我们将multi-cast IP finder传给了SPI。当TCP发现启动的时候,这个finder会发送一个请求广播,并等待其他节点接受到这个请求,并把节点自身的地址响应返回。接下来我们创建了一个Ignite配置对象,并将我们的discoverySPI设置给配置对象。

在调用了start方法启动Ignite实例之后,他把自己作为一个客户端加入到了一个Ignite集群中,接着我们创建了一个缓存区域,名字叫做”HelloWorld”,并且放入了100个数字。在接下来的for循环中,我们依次从缓存区域中读取了这100个数字,并打印到控制台。

最后,我们关闭了Ignite客户端实例。

代码完成之后,接下来构建并运行应用。

  • 第五步

执行构建命令:

$ mvn clean install

这个maven命令会执行clean命令,清除以前的构建内容,并重新编译,测试,打包。命令完成之后,我们可以再target文件夹中找到我们的jar包。

  • 第六步

运行jar文件:

$ java -jar .\target\HelloIgnite-runnable.jar

首先,我们创建了一个新的Ignite客户端实例,他会连接我们集群中的随机一个节点,在Ignite服务节点控制台中,我们可以看到以下输出:

image.png

接着,在我们的应用控制台中,可以看到如下输出:

image.png

我们通过Ignite visor管理太来验证一下缓存中的内容。Apache Ignite visor 命令台工具提供了监控和管理Ignite集群的功能。使用如下命令启动visor控制台:

$ IGNITE_HOME/bin/ignitevisorcmd.sh

使用如下命令验证缓存:

cache -a

我们可以在缓存中看到我们的HelloWorld缓存快的状态:

image.png

在摘要信息中可以很清楚的看到,缓存的大小是100,堆外内存(off-heap)大小也是100.从2.0.1开始,默认情况下,Apache Ignite会将缓存实例都存入堆外内存中。在后面的文章中,我们会更深入的来研究堆外内存和堆内内存(on-heap)的区别。注意一点,为了保证我们的第一个应用足够简单,我们并没有介绍任何Spring对Ignite的支持。

原文:https://www.javacodegeeks.com/2018/10/apache-ignite-easy-java-application.html

猜你喜欢

转载自blog.csdn.net/wolfcode_cn/article/details/83008800
今日推荐