springCloud zookeeper整合,Java Zookeeper微服务注册中心整合
springCloud zookeeper整合,Java Zookeeper微服务注册中心整合
springCloud整合zookeeper代替Eureka
================================
©Copyright 蕃薯耀 2021-03-08
https://www.cnblogs.com/fanshuyao/
Eureka当前已经停止更新,部分项目只存在维护的状态,以后应该就是停止维护,所以有些项目使用了zookeeper作为服务注册中心。这只是其中的一种方式,还可以使用Consul或者Nacos代替
zookeeper将服务SPRINGCLOUD-ZK-CLIENT-SERVICE以节点的形式注册进来,zookeeper的服务节点是临时的并非持久的。
eureka和zookeeper上注册的服务,服务关闭了不会立马消失,会存在一个心跳。
但是eureka注册的服务停止,并不会删除,会在注册中心保留。而zookeeper上的服务停止,zookeeper会删除服务的节点。
服务再次启动注册到zookeeper中,会生成一个新的服务节点。从某种意义上可以说eureka是持久的,zookeeper是临时的
一、Zookeeper的安装和使用
详情见:
https://www.cnblogs.com/fanshuyao/p/13845076.html
二、springCloud zookeeper整合-服务提供者
1、pom.xml引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <version>2.2.4.RELEASE</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.4</version> </dependency>
2、application.properties文件配置
server.port=8611 #zookeeper的服务区分大小写 spring.application.name=SPRINGCLOUD-ZK-CLIENT-SERVICE #zookeeper连接地址 spring.cloud.zookeeper.connect-string=192.168.170.14:2181 #服务实例ID spring.cloud.zookeeper.discovery.instance-id=${spring.application.name}
3、启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringCloudZkClient8611Application { public static void main(String[] args) { SpringApplication.run(SpringCloudZkClient8611Application.class, args); } }
4、服务提供类
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ZkClientController { @Value("${server.port}") private String serverPort; @RequestMapping("/zk") public Result zk() { return Result.ok("端口:" + serverPort); } }
5、返回结果类
import java.util.Date; import cn.hutool.core.date.DateUtil; public class Result { public static final String SUCCESS = "操作成功。"; public static final String FAILURE = "操作失败!"; private boolean result; private String timestamp; private String msg; private Object datas; private Result() {} public static Result ok() { return Result.ok(SUCCESS, null); } public static Result ok(Object datas) { return Result.ok(SUCCESS, datas); } public static Result okMsg(String msg) { return Result.ok(msg, null); } public static Result ok(String msg, Object datas) { Result result = new Result(); result.setResult(true); result.setTimestamp(DateUtil.formatDateTime(new Date())); if(msg == null || msg == "" || msg.trim() == "") { result.setMsg(SUCCESS); }else { result.setMsg(msg); } result.setDatas(datas); return result; } public static Result fail() { return Result.fail(FAILURE, null); } public static Result failMsg(String msg) { return Result.fail(msg, null); } public static Result fail(Object datas) { return Result.fail(FAILURE, datas); } public static Result fail(String msg, Object datas) { Result result = new Result(); result.setResult(false); result.setTimestamp(DateUtil.formatDateTime(new Date())); if(msg == null || msg == "" || msg.trim() == "") { result.setMsg(FAILURE); }else { result.setMsg(msg); } result.setDatas(datas); return result; } public boolean isResult() { return result; } public void setResult(boolean result) { this.result = result; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getDatas() { return datas; } public void setDatas(Object datas) { this.datas = datas; } public static void main(String[] args) { } }
三、springCloud zookeeper整合-服务消费者
1、pom.xml引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <version>2.2.4.RELEASE</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.4</version> </dependency>
2、application.properties配置
server.port=8621 spring.application.name=springCloud-zk-web spring.cloud.zookeeper.connect-string=192.168.170.14:2181 spring.cloud.zookeeper.discovery.instance-id=${spring.application.name}
3、启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringCloudZkWeb8621Application { public static void main(String[] args) { SpringApplication.run(SpringCloudZkWeb8621Application.class, args); } }
4、RestTemplate配置类
import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RestConfig { //@LoadBalanced实现负载均衡 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
5、Controller请求类
注意:zookeeper的服务名是区分大小写的
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class ZkController { //zookeeper的服务区分大小写:No instances available for SPRINGCLOUD-ZK-CLIENT-SERVICE private String serviceUrl = "http://SPRINGCLOUD-ZK-CLIENT-SERVICE"; @Autowired private RestTemplate restTemplate; @RequestMapping(value="/getzk", produces = MediaType.APPLICATION_JSON_VALUE) public Result getzk() { Result result = restTemplate.getForObject(serviceUrl + "/zk", Result.class); return result; } }
6、结果返回类(省略,见上面服务提供者结果返回类)
(时间宝贵,分享不易,捐赠回馈,^_^)
================================
©Copyright 蕃薯耀 2021-03-08
https://www.cnblogs.com/fanshuyao/
相关文章
- Java 学习思路
- Java中的 super和this
- Java Array 方法和使用
- Java基础篇(03):流程控制语句,和算法应用
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
- Java 目录操作二(获取文件的上级目录、获取目录最后修改时间、打印目录结构、遍历指定目录下的所有目录)
- Java学习密函
- 图解 Java IO : 二、FilenameFilter源码
- 8 位卷王!总结 1135 页 Java 核心面试手册,硬钢 BATJ 一线大厂面试官
- 【Java】整理关于java的String类,equals函数和比较操作符的区别
- 【Java】java基本知识
- 系统学习JAVA第十五天(Match类下的方法,日期相关类,处理异常)
- 【Java】获取resources路径下的文件
- Java中流的操作以及编码解码
- Java Applet 素数小程序
- maven项目的java和resources等文件夹不在Java Resources的文件夹里,并且缺少Deployment...
- Tomcat 奔溃:java.lang.OutOfMemoryError: Java heap space
- Java线程锁,synchronized、wait、notify详解--java 管程
- Java学习-072-多线程05:线程休眠 Thread.sleep()
- 一、JAVA调用海康威视SDK实现摄像头预览
- Java中的<< 和 >> 和 >>> 详细分析
- Java之throw和throws的区别及java中的异常处理
- 『Java练习生的自我修养』java-se进阶³ • 线程的等待与唤醒
- Java空指针异常解决java.lang.NullPointerException解决心得
- java学习路线-Java技术人员之路从0基础到高级
- Java socket 服务和客户端传值
- Java程序基本优化
- Java数组List换算方法
- java MD5 加密代码的实现
- Java //PP1.10 编写一个程序,显示你的姓名的大写缩写,显示的形式如下所示:
- java项目异常监控_JAVA项目中的常用的异常处理情况总结