Hazelcast系列(三):hazelcast集成(服务器/客户端)

系列文章

Hazelcast系列(一):初识hazelcast

Hazelcast系列(二):hazelcast集成(嵌入式)

Hazelcast系列(三):hazelcast集成(服务器/客户端)

Hazelcast系列(四):hazelcast管理中心

Hazelcast系列(五):Auto-Detection发现机制

Hazelcast系列(六):Multicast发现机制

Hazelcast系列(七):TCP-IP发现机制

Hazelcast系列(八):数据结构

目录

        前言

        环境

        服务器

        客户端 

        测试

        其他 

        参考


前言

前面对通过 Hazelcast系列(二):hazelcast集成(嵌入式)已经对 Hazelcast 如何在 Java 中使用,已经有了初步的认识,接下来,咱们研究一下 Hazelcast 集成的另外一种模式:服务器/客户端

相较于 嵌入式 的模式,服务器/客户端 模式将 Hazelcast 缓存服务和客户端单独拆分开,方便后期对服务器的单独维护和持续扩展,避免缓存的数据在堆内存中影响到垃圾收集器收集效率和垃圾回收时的应用响应时间。

当前 Hazelcast 服务器版本:4.2.6,客户端版本:5.1.7

环境

名称版本
hazelcast/management-center 管理中心 5.3.0
hazelcast/hazelcast 服务端4.2.6
springboot2.7.16
hazelcast 客户端5.1.7

服务器

        服务器端通过 Docker 部署,Docker 的安装和配置可以参照俺的 CentOS 7下安装Docker,部署采用版本 hazelcast/hazelcast:4.2.6      

  • 首先拉取 hazelcast 的镜像
docker pull hazelcast/hazelcast:4.2.6
  • 添加一个配置文件 hazelcast.yaml,配置服务器集群中成员的相关参数,然后放在某个目录下,这里为 /home/hazelcast/config
hazelcast:cluster-name: hazelcast-clusterinstance-name: hzInstance_141network:port:auto-increment: trueport-count: 100port: 5701outbound-ports:- 0join:auto-detection:enabled: falsemulticast:enabled: falsemulticast-group: 224.2.2.3multicast-port: 54327tcp-ip:enabled: truemember-list:- 192.168.119.141

   说明: cluster-name 集群名称,通过名称隔离同网络下的集群

               instance-name 服务器节点名称

               network.port.auto-increment 成员节点使用的端口是否允许自动增长

               network.port.port-count 使用端口增长的范围,例如这里:5701-5801

               network.port.port 默认使用的端口,如果 auto-increment 为false,则必须使用 5701

               network.outbound-ports 套接字绑定期间使用的临时端口,可以是值和范围,0为没限制

               network.tcp-ip.enabled 采用 tcp/ip 的方式,前面两个发现方式必须设置为 false

               network.tcp-ip.member-list 集群中能被发现的成员,可以只配置一个,端口可不设置

  • 通过 docker run 命令,启动容器名称为 hazecast-node1 的节点1
docker run -d -p 5701:5701 
-e JAVA_OPTS="-Dhazelcast.config=/opt/hazelcast/config_ext/hazelcast.yaml" 
-e HZ_NETWORK_PUBLICADDRESS=192.168.119.141:5701 
-v /home/hazelcast/config:/opt/hazelcast/config_ext 
--name hazecast-node1 hazelcast/hazelcast:4.2.6

   说明:-e 为添加执行的环境变量

              -e JAVA_OPTS="-Dhazelcast.config=/opt/hazelcast/config_ext/hazelcast.yaml"   添加hazecast启动寻找配置路径

              -e HZ_NETWORK_PUBLICADDRESS  添加集群中成员的公共地址,方便私有云映射

              -v  /home/hazelcast/config:/opt/hazelcast/config_ext  挂载本地 hazelcast.yaml 所在配置目录到容器中

              --name 容器名称,节点名称

    另外:192.168.119.141 为虚拟机地址,这里看情况配置对外公共地址

  • 接下来,继续通过 docker run 命令,启动容器名称为 hazecast-node2 的节点2
docker run -d -p 5702:5701 
-e JAVA_OPTS="Dhazelcast.config=/opt/hazelcast/config_ext/hazelcast.yaml" 
-e HZ_NETWORK_PUBLICADDRESS=192.168.119.141:5702 
-v /home/hazelcast/config:/opt/hazelcast/config_ext 
--name hazecast-node2 hazelcast/hazelcast:4.2.6

    说明:参数说明参考上面的

              hazecast-node2 和 hazecast-node1 对比,对外端口不同

  • 服务器端这样差不多就启动了,通过搭建管理中心Hazelcast系列(三):hazelcast管理中心,我们可连接到对应集群查看,当然查看本地日志和获取本地集群数也可以确认

客户端 

        客户端配置和前面配置 Hazelcast系列(二):hazelcast集成(嵌入式)大同小异,咱们直接开干。

  • 创建一个SpringBoot项目,先添加依赖,这里额外添加 spring-boot-starter-web 依赖方便测试
      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.hazelcast</groupId><artifactId>hazelcast</artifactId></dependency>
  • 项目 resources 下添加 hazelcast-client.yaml 配置文件,内容如下:
hazelcast-client:cluster-name: hazelcast-clusterinstance-name: hzInstance_clientnetwork:cluster-members:- 192.168.119.141

    说明:cluster-name 要连接的集群名称

               instance-name 客户端节点名称

               network.cluster-members 连接的集群成员,这里可配置一个,但是尽量全部配置

  • 对应的 application.yml,内容如下
server:port: 8082

  • 添加额外的测试代码
@RestController
@RequestMapping("/data")
public class DataController {@Autowiredprivate HazelcastInstance hazelcastInstance;private ConcurrentMap<String,Long> retrieveMap() {return hazelcastInstance.getMap("map");}@PostMapping("/put")public String put(@RequestParam(value = "key") String key, @RequestParam(value = "value") Long value) {retrieveMap().put(key, value);return "成功";}@GetMapping("/get")public Long get(@RequestParam(value = "key") String key) {Long value = retrieveMap().get(key);return value;}
}
  • 接下来,直接启动SpringBoot项目,然后去管理平台查看对应的客户端连接情况(本地查看日志亦可)

测试

        前面在客户端已经连接上了服务器,并且客户端已经有了测试代码,下面,开测。

  • Postman 发送测试数据 key = test,value = 11111

  • Postman 获取数据 key = test

其他 

  1. 服务器端 Docker 启动的时候,-e 添加的 hazelcast 环境变量也可配置在 hazelcast.yaml 中,同理,hazelcast.yaml 的参数也可配置在 -e 环境变量上
  2. 每个版本的 hazelcast.jar 中,都有完整的或者默认的服务器和客户端参数配置

参考

  • Java Client

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

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

相关文章

动态规划:918. 环形子数组的最大和

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路解题思路状态表示状态转移方程初始化填表顺序返回值 三、代码实现总结 前言 本篇文章仅是作为小白的我的一些理解&#xff0c;&#xff0c;…

docker安装skyWalking笔记

确保安装了docker和docker-compose sudo docker -v Docker version 20.10.12, build 20.10.12-0ubuntu4 sudo docker-compose -v docker-compose version 1.29.2, build unknown 编写docker-compose.yml version: "3.1" services: skywalking-oap:image: apach…

ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?

目录 疑问 编译、链接和装载&#xff1a;拆解程序执行 ELF 格式和链接&#xff1a;理解链接过程 小结 疑问 既然我们的程序最终都被变成了一条条机器码去执行&#xff0c;那为什么同一个程序&#xff0c;在同一台计算机上&#xff0c;在 Linux 下可以运行&#xff0c;而在…

《机器学习》第5章 神经网络

文章目录 5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 全局最小与局部最小5.5 其他常见神经网络RBF网络ART网络SOM网络级联相关网络Elman网络Boltzmann机 5.6 深度学习 5.1 神经元模型 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络&#xff0c;它…

如何做好数据分析中的数据可视化?

数据可视化在数据分析中扮演着重要的角色&#xff0c;它帮助我们更好地理解和传达数据的特征、趋势和规律。以下是关于如何做好数据分析中的数据可视化的详细介绍。 一、准备工作 1. 理解数据 在进行数据可视化之前&#xff0c;首先要对数据有一个清晰的理解。了解数据的来源…

Yakit工具篇:简介和安装使用

简介(来自官方文档) 基于安全融合的理念&#xff0c;Yaklang.io 团队研发出了安全领域垂直语言Yaklang&#xff0c;对于一些无法原生集成在Yak平台中的产品/工具&#xff0c;利用Yaklang可以重新编写 他们的“高质量替代”。对于一些生态完整且认可度较高的产品&#xff0c;Y…

JavaScript 通过数组对JSON key字段进行排序

这里我以vue为例 不过json排序用的js方式 任何前端项目都可以通过js完成 我们组件代码现在是这样的 <template><div><div v-for "item in navCateList" :key "item.id">{{ item.name }}</div></div> </template>&…

使用.NET实现WOL唤醒远程开机

文章目录 1. 背景2. 关于 WOL2.1 WOL 工作原理2.2 开启网卡唤醒功能 3. 快速验证3.1 局域网 Wake on Lan 应用3.2 Ubuntu 的 etherwake 命令4. 代码实现4.1 创建.NET控制台应用程序4.2 编写代码4.3 运行应用程序 5. 最后 1. 背景 家居自动化是现代智能家居的重要组成部分&…

[ROS2系列] ubuntu 20.04测试rtabmap

目录 背景&#xff1a; 一、配置 turtlebot3 二、安装RTAB-Map ROS2包&#xff1a; 三、启动 Turtlebot3 模拟器&#xff1a; 四、启动 RTAB 地图&#xff1a; 五、启动导航&#xff08;nav2_bringup应安装软件包&#xff09;&#xff1a; 背景&#xff1a; 1、设备&…

杀死僵尸进程ZooKeeperMain

关闭Hadoop后jps发现还有个进程ZooKeeperMain没有关闭&#xff0c;使用kill -9 <>也没有用&#xff0c;这种就是僵尸进程&#xff0c;需要用父进程ID来杀死 解决方法 话不多说&#xff0c;直接上解决方案&#xff0c; 1. 第一步 清楚需要关闭的进程ID&#xff0c;我…

项目配置vue.config jsconfig babel.config .prettierc .env .eslintrc

.env 在一个产品的前端开发过程中&#xff0c;一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境&#xff0c;然后才能正式的发布。对应每一个环境可能都会有所差异&#xff0c;比如说服务器地址、接口地址、websorket地址…… 等等。在各个环境切换的时候&am…

小程序 | 小程序后端用什么语言开发比较好

目录 ♣️ 引言 选择合适的后端语言 推荐使用Node.js Node.js 的优点 其他备选语言 ♣️ 小结 ♣️ 引言 小程序的兴起已经成为了当今移动互联网时代的热点之一&#xff0c;而小程序后端的好坏直接影响着小程序的使用体验&#xff0c;因此&#xff0c;选择一种好的语言来…

一键批量转换,轻松将TS视频转为MP4视频,实现更广泛的播放和分享!

在享受精彩视频内容的同时&#xff0c;有时我们可能会面临一个问题&#xff1a;某些视频格式可能不太适合我们的播放设备或分享平台。特别是TS格式的视频&#xff0c;在一些情况下可能无法直接播放或上传。但是不用担心&#xff0c;因为我们为您提供了一款强大的视频剪辑工具&a…

数据特征选择 | Lasso特征选择(Python)

文章目录 效果一览文章概述源码设计小结效果一览 文章概述 Lasso算法是一种经典的线性回归算法,被广泛应用于特征选择和降维问题。相较于传统的线性回归算法,Lasso算法能够在保持预测准确性的同时,自动筛选出对目标变量影响较大的特征变量,从而达到降低模型复杂度、提高泛化…

Python文件读写实战:处理日常任务的终极工具!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python Python文件的读写操作时&#xff0c;有很多需要考虑的细节&#xff0c;这包括文件打开方式、读取和写入数据的方法、异常处理等。 在本文中&#xff0c;将深入探讨Python中的文件操作&#xff0c;旨在提供全面的…

TSINGSEE青犀智慧城市数字基座解决方案,助力城市数字化转型

一、行业背景 我国“十四五”规划纲要中提出&#xff0c;分级分类推进新型智慧城市建设&#xff0c;将物联网感知设施、通信系统等纳入公共基础设施统一规划建设&#xff0c;推进市政公用设施、建筑等物联网应用和智能化改造。完善城市信息模型平台和运行管理服务平台&#xf…

Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

文章目录 创建导航NavigationAgent2D节点设置目标位置其他文章 创建导航 首先&#xff0c;创建一个基本的场景&#xff0c;下面的文章讲解了如何创建一个基本的导航场景&#xff0c;点击如下链接前往该文章&#xff1a; Godot2D角色导航-自动寻路教程 NavigationAgent2D节点 …

蓝桥杯(迷宫,C++)

输入&#xff1a; 思路&#xff1a; 1、注意输入用字符串。 2、采用广度搜素的方法来求解。 3、因为最后要求字典序最小且D<L<R<U,所以在遍历四个方向的时候&#xff0c; 先向下&#xff0c;再向左、右&#xff0c;最后向上。 #include<iostream> #include…

thinkphp6

unexpected , expecting case (T_CASE) or default (T_DEFAULT) or } 在模板中应用{switch}{/switch}标签,报错,其实是switch的问题&#xff0c;模板解析后&#xff0c;switch:和第一个case:之间不能有有输出的&#xff0c;一个空格也不行&#xff0c;所以第一个要紧跟着 Thi…

基于Jaya优化算法的电力系统最优潮流研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…