嵌入式模式
Ignite 的常规使用场景是使用命令行工具启动和管理集群。但是有时用户也希望通过 Java 程序管理集群,这个模式称为嵌入式模式
。
本章节介绍如何从 Java 程序启动 Ignite 3。
提示
与 Ignite 2 不同,Ignite 3 中的节点没有分为客户端节点和服务端节点,从嵌入式模式启动的节点默认是要存储数据的。
1.环境要求
本章节介绍运行 Ignite 所必需的软硬件平台要求,根据规划的集群的大小,确定所需的系统规模。
- JDK:11 或更高版本;
- OS:Linux(Debian 和 Red Hat 版本)、Windows 10 或 11;
- 指令集架构:x86 或 x64。
2.将Ignite添加到项目中
首先需要将 Ignite 添加到项目中,最简单的方法是使用 Maven:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-runner</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
3.准备Ignite配置
要启动 Ignite 节点,需要一个配置文件用于指定节点的所有配置参数。在本章节中,建议安装 Ignite 3 并使用其中的默认配置文件,该文件位于ignite3-db-3.0.0/etc/ignite-config.conf
。
4.传递JVM参数
需要将以下 JVM 参数传递给应用程序,才能访问专有的 SDK API:
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.lang.invoke=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/jdk.internal.misc=ALL-UNNAMED
--add-opens java.base/jdk.internal.access=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
-Dio.netty.tryReflectionSetAccessible=true
5.启动Ignite服务端节点
使用下面的接口,可以启动一个Ignite服务端节点:
IgniteServer node = IgniteServer.start("node", configFilePath, workDir);
此代码启动一个名为node
的 Ignite 节点,该节点使用configFilePath
参数指定的配置文件,并使用workDir
参数指定的文件夹来存储数据。节点启动之后,该方法返回可用于与集群交互的 IgniteServer
实例。
6.初始化集群
启动的节点默认会彼此发现对方,但如果不初始化集群,就不会组成一个可操作的集群,只有初始化集群才能激活这些节点。如果有多个节点,一旦集群被激活,它们将形成一个拓扑并自动在彼此之间分配工作负载。
可以使用以下代码初始化集群:
InitParameters initParameters = InitParameters.builder()
.metaStorageNodeNames("node")
.clusterName("cluster")
.clusterConfiguration({config-with-license})
.build();
node.initCluster(initParameters);
6.获取Ignite实例
集群启动之后,就可以获取Ignite
类的实例:
Ignite ignite = node.api();
该实例对象可用于与集群进行交互。
在以下示例中,调用了 SQL API 与集群交互:
ignite.sql().execute(null, "CREATE TABLE IF NOT EXISTS Person (id int primary key, name varchar, age int);");
ignite.sql().execute(null, "insert into Person (id, name, age) values ('1', 'Person Man', '501'");
try (ResultSet<SqlRow> rs = ignite.sql().execute(null, "SELECT id, name, age from Person")) {
while (rs.hasNext()) {
SqlRow row = rs.next();
System.out.println(" "
+ row.value(1) + ", "
+ row.value(2));
}
}
提示
Session 是可关闭的,但可以安全地忽略 DDL 和 DML 查询的close()
方法,因为它们不会使游标保持打开状态。
有关使用 Ignite 的更多示例,请参见 examples 代码库。
7.下一步
到这里之后,用户可能希望:
18624049226