从2.4.0版本开始,Apache Ignite引入了一种新的连接到Ignite群集的方法,该方法允许与Ignite群集进行通信而无需启动Ignite客户端节点。 从历史上看,Apache Ignite提供了客户端和服务器节点两个概念。 点燃旨在用作轻量级模式的客户端节点,该节点不存储数据(但是它可以存储在高速缓存附近),并且不执行任何计算任务。 主要是,客户端节点用于与服务器进行远程通信,并允许使用整套Ignite API来操纵Ignite缓存。 Ignite客户端节点有两个主要缺点:
- 只要Ignite客户端节点连接到Ignite群集,它就会成为群集拓扑的一部分。 拓扑越大,维护难度就越大。
- 在客户端模式下,Apache Ignite节点会消耗大量资源来执行缓存操作。
为了解决上述问题,Apache Ignite提供了一种新的二进制客户端协议,用于以任何编程语言或平台实现瘦Ignite客户端。
请注意,“瘦”一词意味着它不会启动任何与Ignite群集进行通信的Ignite节点,也不会实现任何发现/通信SPI逻辑。
瘦客户端通过TCP套接字连接到Ignite群集,并使用定义明确的二进制协议执行CRUD操作。 该协议是完全基于套接字的请求-响应样式协议。 该协议被设计为足够严格以确保通信中的标准化(例如连接握手,消息长度等),但仍然足够灵活以使开发人员可以扩展该协议以实现自定义功能。
Apache Ignite在以下内容中提供了简要的数据格式和通信详细信息:
文档使用二protocol.Ignite已经支持.NET和Java瘦客户机基础上的协议,并计划发布瘦客户机主要语言,如goLang,Python等。但是,你可以实现你的瘦客户机顶部通过使用二进制协议,可以选择任何您喜欢的编程语言。
还要注意,由于它通过中间节点工作,因此Apache Ignite瘦客户端的性能略低于Ignite客户端节点。 假设您有两个Apache Ignite A,B节点,并且您正在使用瘦客户机C从集群中检索数据。 使用瘦客户机C,您已连接到节点B,并且每当尝试检索属于节点A的任何数据时,请求始终通过客户机B。对于Ignite客户机节点,它将发送请求。直接到节点A。
在大多数情况下,您不必关心消息格式如何,或套接字握手如何执行。 每种编程语言的瘦客户端都为您封装了艰苦的工作。 无论如何,如果您想深入研究Ignite二进制协议或在创建自己的瘦客户机时遇到任何问题,请参考Ignite文档。
在继续讨论更高级的主题之前,让我们看一个使用Ignite瘦客户端的简单应用程序。 在这个简单的应用程序中,我向您展示了开始使用瘦客户机所需的点点滴滴。 示例的源代码可在GitHub存储库中找到 ,请参阅第2章。
步骤1 。 从GitHub存储库克隆或下载项目。 如果您打算从头开始开发项目,请在pom.xml文件中添加以下maven依赖项。 瘦客户机唯一需要的ignite-core库,其余库仅用于日志记录。
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>2.6.0</version>
</dependency>
<!-- Logging wih SLF4J -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.1</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.1</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.0.1</version>
</dependency>
第二步 。 现在,让我们创建一个名为HelloThinClient的新Java类。
第三步 。 复制并粘贴以下源代码。 不要忘记保存文件。
import org.apache.ignite.IgniteException;
import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientCache;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.configuration.ClientConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class HelloThinClient {private static final Logger logger = LoggerFactory.getLogger(HelloThinClient.class);private static final String HOST = "127.0.0.1";private static final String PORT = "10800";private static final String CACHE_NAME = "thin-cache";public static void main(String[] args) {logger.info("Simple Ignite thin client example working over TCP socket.");ClientConfiguration cfg = new ClientConfiguration().setAddresses(HOST + ":" + PORT);try (IgniteClient igniteClient = Ignition.startClient(cfg)) {ClientCache < String, String > clientCache = igniteClient.getOrCreateCache(CACHE\ _NAME);// put a few valueclientCache.put("Moscow", "095");clientCache.put("Vladimir", "033");// get the region code of the Vladimir String val = clientCache.get("Vladimir");logger.info("Print value: {}", val);} catch (IgniteException e) {logger.error("Ignite exception:", e.getMessage());} catch (Exception e) {logger.error("Ignite exception:", e.getMessage());}}
}
步骤4.让我们仔细看一下我们上面编写的程序。
private static final Logger logger = LoggerFactory.getLogger(HelloThinClient.class);private static final String HOST = "127.0.0.1";private static final String PORT = "10800";private static final String CACHE_NAME = "thin-cache";
首先,我们声明了一些常量:记录器,主机IP地址,端口和我们要创建的缓存名称。 如果您使用其他IP地址,则应在此处进行更改。 端口10800是Ignite瘦客户端的默认端口。
СlientConfiguration cfg = new ClientConfiguration().setAddresses(HOST+":"+PORT);
这些是程序中下一个令人兴奋的行。 我们创建了一个点燃实例
СlientConfiguration并传递了我们上面声明的地址。 在下一个try-catch块中,我们定义了一个新缓存,名称为
精简缓存并放置2个键值对。 我们还使用了Ignition.startClient方法来初始化与Ignite节点的连接。
try (IgniteClient igniteClient = Ignition.startClient(cfg)) {ClientCache < String, String > clientCache = igniteClient.getOrCreateCache(CACHE\ _NAME);// put a few valueclientCache.put("Moscow", "095");clientCache.put("Vladimir", "033");// get the region code of the Vladimir String val = clientCache.get("Vladimir");logger.info("Print value: {}", val);} catch (IgniteException e) {logger.error("Ignite exception:", e.getMessage());} catch (Exception e) {logger.error("Ignite exception:", e.getMessage());}
}
后来,我们检索了键Vladimir的值并将其打印在控制台中。
步骤5 。 如果尚未启动Apache Ignite单节点集群,请启动它。 在您喜欢的终端中使用以下命令。
$ IGNITE_HOME/bin/ignite.sh
步骤6 。 要生成项目,请发出以下命令。
$ mvn clean install
这将运行Maven,告诉它执行安装目标。 此目标将编译,测试和打包您的项目代码,然后将其复制到本地依赖项存储库中。 成功编译后,第一次构建过程将花费几分钟,名为的可执行jar
HelloThinClient-runnable.jar将在目标目录中创建。
步骤7 。 通过键入以下命令来运行应用程序。
$ java -jar .\target\HelloThinClient-runnable.jar
您应该在终端中看到很多日志。 在日志末尾,您应该会找到类似的内容。
该应用程序通过TCP套接字连接到Ignite节点,并在缓存精简缓存上执行放置和获取操作。 如果您查看Ignite节点控制台,您应该注意到Ignite群集拓扑尚未更改。
翻译自: https://www.javacodegeeks.com/2019/01/apache-ignite-client-apache-ignite.html