翻译:吴嘉俊,叩丁狼高级讲师。
在本文中,我们会通过创建第一个Ignite应用,用于从分布式的缓存中存放/获取值,来进一步了解Ignite的使用。在第一个例子中,我们尽可能的用最简单的代码来展示如何在Java应用中操作Apache Ignite集群的数据。
本文的应用可以从GitHub中clone(https://github.com/srecon/the-apache-ignite-book/tree/master/chapters/chapter-2)
按照以下流程执行:
-
启动你的Ignite节点。
-
创建一个Maven项目。
- 编译应用。
- 运行应用。
我们一步一步来操作:
- 第一步
启动一个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的文件夹。在这个文件夹下,你可以看到如下的项目结构:
在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服务节点控制台中,我们可以看到以下输出:
接着,在我们的应用控制台中,可以看到如下输出:
我们通过Ignite visor管理太来验证一下缓存中的内容。Apache Ignite visor 命令台工具提供了监控和管理Ignite集群的功能。使用如下命令启动visor控制台:
$ IGNITE_HOME/bin/ignitevisorcmd.sh
使用如下命令验证缓存:
cache -a
我们可以在缓存中看到我们的HelloWorld缓存快的状态:
在摘要信息中可以很清楚的看到,缓存的大小是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