apache ignite_使用Apache Ignite瘦客户端– Apache Ignite内部博客

apache ignite

从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,告诉它执行安装目标。 此目标将编译,测试和打包您的项目代码,然后将其复制到本地依赖项存储库中。 成功编译后,第一次构建过程将需要几分钟才能完成,名为
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

apache ignite

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 网络编程 方式_JAVA网络编程

概念BIO 阻塞io&#xff0c;1.4之前NIO no-blocking io 非阻塞io&#xff0c;jdk1.4AIO 异步io&#xff0c;jdk1.7浏览器输入网址&#xff0c;敲下回车之后发生了什么&#xff1f;1.URL解析2.DNS解析概念&#xff1a;Domain Name System&#xff0c;域名系统&#xff0c;本质…

如何设置背景图(前端开发)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模糊化背景图</title><style>body {background-image: url("image/bjt03.jpg");background-repeat: no-repeat;background-atta…

java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

Java基础之字符串操作——String字符串什么是字符串&#xff1f;如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列。为了更好的理解以上的理论&#xff0c;我们先来解释下字符序列&#xff0c;字符序列&#xff1a;把多个字符按照一定的顺序排列起来&#xff1…

查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI。 第三部分,迁移到云...

查看oracle会话和进程在这篇文章中&#xff0c;我将继续在Oracle Digital Assistant和Oracle Digital Assistant之上为FlexDeploy实现对话式UI的故事。 Fn项目 。 今天&#xff0c;我将围绕聊天机器人工作的无服务器API迁移到云中&#xff0c;因此整个解决方案都在云中工作&am…

浏览器用户脚本管理器(Tampermonkey)

文章目录脚本管理器的好处是什么&#xff1f;用户脚本管理器有哪些&#xff1f;如何使用&#xff1f;安装脚本示例常用脚本脚本管理器的好处是什么&#xff1f; 用户脚本管理器将在您的用户脚本管理方面提供更多的便利。 它提供了诸如便捷脚本安装、自动更新检查、标签中的脚本…

服务器$java_top路径_ERP实施项目-MD120_FIN000_即时打印_V1.0

中国移动项目即时打印开发在此将web的即时打印开发成通用程序。1、首先通过创建rtf模板制定报表的输出格式&#xff1b;2、将需要输出的数据插入客户化表cux_fnd_xml_pool中&#xff1b;3、通过EBS功能调用CuxFndXmlpViewer.jsp。此jsp程序会根据传入的参数判断调用哪个rtf模板…

通讯网关 api网关_API网关正在经历身份危机

通讯网关 api网关这些年来&#xff0c;API网关正在经历一些身份危机 。 它们是否是集中的共享资源&#xff0c;从而促进了API对外部实体的公开和治理&#xff1f; 它们是集群入口哨兵&#xff0c;可以严格控制哪些用户流量进入或离开集群吗&#xff1f; 还是他们根据自己拥有…

百度搜索引擎使用技巧

1.在指定的网站搜索内容 在搜索框输入&#xff1a;site:youku.com 蛋炒饭&#xff0c;则只会返回优酷网站上关于蛋炒饭的内容 2.屏蔽指定的网站 例如&#xff0c;搜索“内存溢出”&#xff0c;但是不希望看到 csdn 网站相关的内容&#xff0c;你可以在搜索框输入&#xff1a;内…

docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序

docker 容器监控在这篇简短的文章中&#xff0c;我将展示一种简单的方法来确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序。 我将使用标准工具JConsole&#xff0c;它是计算机上JDK安装的一部分。 如果存在问题&#xff08;例如&#xff0c;内存泄漏…

phpexcel 日期 时分秒_thinkPHP+PHPExcel实现读取文件日期的方法含时分秒

Vendor(PHPExcel.PHPExcel.IOFactory);$inputFileName Public/demo/demo.xls;$objReader new PHPExcel_Reader_Excel5();$objPHPExcel $objReader->load($inputFileName);$sheet $objPHPExcel->getSheet(0);$highestRow $sheet->getHighestRow(); // 取得总行数$…

css中的display属性值:table,table-row,table-cell

table&#xff1a;此元素会作为块级表格来显示&#xff08;类似 <table>&#xff09;&#xff0c;表格前后带有换行符。 table-row&#xff1a;此元素会作为一个表格行显示&#xff08;类似 <tr>&#xff09;。 table-cell&#xff1a;此元素会作为一个表格单元格显…

Bootstrap的学习

文章目录概念入门响应式布局响应式布局的实现&#xff08;栅格系统&#xff09;示例代码注意事项栅格系统参考视频应用 Bootstrap 的组件概念 一个前端开发的框架&#xff0c;Bootstrap&#xff0c;来自Twitter&#xff0c; 是目前很受欢迎的前端框架。Bootstrap 是基于HTML、…

jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史

jdk8 string::最近有人提议从JDK 12中删除Java预览功能Raw String Literals &#xff08; JEP 326 &#xff09;&#xff0c; 现在正式宣布将删除该预览功能 &#xff08; Java SE 12 [JSR 386] 25版将其删除 &#xff09;。 JDK String类中已添加了几种方法来支持此功能。 即使…

注册界面的实现案例视频(前端开发)

视频1&#xff1a;https://live.csdn.net/v/182184 视频2&#xff1a;https://live.csdn.net/v/182185 视频3&#xff1a;https://live.csdn.net/v/182186 视频4&#xff1a;https://live.csdn.net/v/182200

jdbc如何写csv文件_Java:将JDBC结果集作为CSV流化

jdbc如何写csv文件在上一篇文章中 &#xff0c;我展示了如何将java.sql.ResultSet转换为JSON并将其流回调用方。 这篇文章是关于以CSV格式流式传输。 流式传输使您可以一点一点地传输数据&#xff0c;而不必将所有数据都加载到服务器的内存中。 例如&#xff0c;考虑以下Resul…

使用Bootstrap开发网站首页

视频1&#xff1a;https://live.csdn.net/v/182207 视频2&#xff1a;https://live.csdn.net/v/182208 视频3&#xff1a;https://live.csdn.net/v/182209

在java中3.14156d表示_2006年9月计算机等级考试二级Java笔试真题

一、选择题(每小题2分&#xff0c;共70分)下列各题A)、B)、C)、D)四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂写在答题卡相应位置上&#xff0c;答在试卷上不得分。(1)下列选项中不符合良好程序设计风格的是_____。A)源程序要文档化B)数据说明的次序…

apigee 安装_APIGEE:用于API代理的CI / CD管道

apigee 安装在本文中&#xff0c;我们将看到如何为APIGEE API代理创建CI / CD管道。 我已经参考了APIGEE社区上同一主题的几篇文章。 这些给了一些关于如何为API代理设置CI / CD管道的想法。 这是我用来设置CI / CD的工具。 詹金斯 节点 蜂胶 新人 APIGEE管理API 确保已创…

超链接标签/<a>标签

保留 <a> 标签的点击功能&#xff0c;但是点击不需要跳转&#xff0c;也就是取消 href 属性的功能&#xff0c;可以这样做&#xff1a; <a href"javascript:void(0);">test2</a>href 属性不能去掉&#xff0c;否则看不到链接样式。

php model层怎么写逻辑,目前用php框架的话,大家会把逻辑写到model中吗?

目前用php框架的话&#xff0c;大家会把逻辑写到model中吗&#xff1f;还是model只做数据的添加删除 修改操作&#xff1f;如果说是简单 mvc框架 你们把逻辑写在哪里&#xff1f;controller&#xff1f;还是说自己弄了个逻辑层&#xff1f;回复内容&#xff1a;目前用php框架的…