SpringCloud学习笔记(四)_ZooKeeper注册中心

基于Spring Cloud实现服务的发布与调用。而在18年7月份,Eureka2.0宣布停更了,将不再进行开发,所以对于公司技术选型来说,可能会换用其他方案做注册中心。本章学习便是使用ZooKeeper作为注册中心。

本章使用的zookeeper版本是 3.6.0

项目架构图如下:

搭建服务提供者

1、新建一个maven项目(test-springcloud-provider-payment8004)

结构如下:

2、引入依赖,编辑pom文件

1 <!-- spring-cloud 整合 zookeeper -->
2 <dependency>
3     <groupId>org.springframework.cloud</groupId>
4     <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
5 </dependency>

完整pom文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>2 <project xmlns="http://maven.apache.org/POM/4.0.0"3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">5     <parent>6         <artifactId>test-springcloud</artifactId>7         <groupId>com.test</groupId>8         <version>1.0-SNAPSHOT</version>9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>test-springcloud-provider-payment8004</artifactId>
13 
14     <dependencies>
15 
16         <!-- spring-cloud 整合 zookeeper -->
17         <dependency>
18             <groupId>org.springframework.cloud</groupId>
19             <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
20             <!-- 排除自带的zookeeper jar包 -->
21             <exclusions>
22                 <exclusion>
23                     <groupId>org.apache.zookeeper</groupId>
24                     <artifactId>zookeeper</artifactId>
25                 </exclusion>
26             </exclusions>
27         </dependency>
28 
29         <!-- zookeeper 引入对应版本的zookeeper -->
30         <dependency>
31             <groupId>org.apache.zookeeper</groupId>
32             <artifactId>zookeeper</artifactId>
33             <version>3.6.0</version>
34             <exclusions>
35                 <exclusion>
36                     <groupId>org.slf4j</groupId>
37                     <artifactId>slf4j-log4j12</artifactId>
38                 </exclusion>
39                 <exclusion>
40                     <groupId>log4j</groupId>
41                     <artifactId>log4j</artifactId>
42                 </exclusion>
43             </exclusions>
44         </dependency>
45 
46         <!-- spring boot -->
47         <dependency>
48             <groupId>org.springframework.boot</groupId>
49             <artifactId>spring-boot-starter-web</artifactId>
50         </dependency>
51         <dependency>
52             <groupId>org.springframework.boot</groupId>
53             <artifactId>spring-boot-starter-actuator</artifactId>
54         </dependency>
55 
56         <dependency>
57             <groupId>org.springframework.boot</groupId>
58             <artifactId>spring-boot-devtools</artifactId>
59             <scope>runtime</scope>
60             <optional>true</optional>
61         </dependency>
62         <dependency>
63             <groupId>org.projectlombok</groupId>
64             <artifactId>lombok</artifactId>
65             <optional>true</optional>
66         </dependency>
67 
68         <dependency>
69             <groupId>org.springframework.boot</groupId>
70             <artifactId>spring-boot-starter-test</artifactId>
71             <scope>test</scope>
72         </dependency>
73 
74     </dependencies>
75 
76     <build>
77         <finalName>test-springcloud-provider-payment8004</finalName>
78     </build>
79 
80 </project>

pom.xml

需要注意,由于通过spring-cloud-starter-zookeeper-discovery依赖引入的zookeeper jar包,于zookeeper服务器版本不一致导致的,导致项目启动失败

报错:Caused by: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /services/xx/xxx

解决:引入对于版本的 zookeeper jar包,本章使用的zookeeper版本是3.6.0,所以引入zookeeper-3.6.0.jar,如下:

 1 <!-- spring-cloud 整合 zookeeper -->2 <dependency>3     <groupId>org.springframework.cloud</groupId>4     <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>5     <!-- 排除自带的zookeeper jar包 -->6     <exclusions>7         <exclusion>8             <groupId>org.apache.zookeeper</groupId>9             <artifactId>zookeeper</artifactId>
10         </exclusion>
11     </exclusions>
12 </dependency>
13 
14 <!-- zookeeper 引入对应版本的zookeeper -->
15 <dependency>
16     <groupId>org.apache.zookeeper</groupId>
17     <artifactId>zookeeper</artifactId>
18     <version>3.6.0</version>
19     <exclusions>
20         <exclusion>
21             <groupId>org.slf4j</groupId>
22             <artifactId>slf4j-log4j12</artifactId>
23         </exclusion>
24         <exclusion>
25             <groupId>log4j</groupId>
26             <artifactId>log4j</artifactId>
27         </exclusion>
28     </exclusions>
29 </dependency>

pom.xml

3、编辑配置文件application.yml

 1 # 端口2 server:3   port: 80044 5 spring:6   application:7     name: cloud-payment-service8   cloud:9     zookeeper:
10       # 集群模式用逗号隔开
11       connect-string: 127.0.0.1:2181

4、编写主启动类

1 // 启用服务发现
2 @EnableDiscoveryClient
3 @SpringBootApplication
4 public class PaymentMain8004 {
5     public static void main(String[] args) {
6         SpringApplication.run(PaymentMain8004.class, args);
7     }
8 }

5、编写Controller

 1 @RestController2 @Slf4j3 public class PaymentController {4 5     @Value("${server.port}")6     private String serverPort;7 8     @RequestMapping(value = "payment/zk")9     public String paymentzk(){
10         return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID();
11     }
12 }

6、启动项目,测试

1)使用地址:http://localhost:8004/payment/zk

2)使用zookeeper客户端连接到zookeeper服务中,查看节点信息

json格式如下:

 1 {2     "name": "cloud-payment-service",3     "id": "4f3db6b1-7d3a-4b3e-ac7a-159289573440",4     "address": "192.168.1.4",5     "port": 8004,6     "sslPort": null,7     "payload": {8         "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",9         "id": "application-1",
10         "name": "cloud-payment-service",
11         "metadata": {}
12     },
13     "registrationTimeUTC": 1586166066913,
14     "serviceType": "DYNAMIC",
15     "uriSpec": {
16         "parts": [{
17             "value": "scheme",
18             "variable": true
19         }, {
20             "value": "://",
21             "variable": false
22         }, {
23             "value": "address",
24             "variable": true
25         }, {
26             "value": ":",
27             "variable": false
28         }, {
29             "value": "port",
30             "variable": true
31         }]
32     }
33 }

View Code

7、测试zookeeper的服务节点是临时节点还是永久节点?

通过关闭应用服务,在zookeeper客户端中是用命令:ls /services/cloud-payment-service,

查看服务之后存在,然后启动服务,查看节点ID是否相同

通过测试验证:zookeeper的服务节点是临时节点

搭建服务消费者

1、新建一个maven项目(test-springcloud-order7999)

项目结构如下:

2、引入pom依赖,同上(与服务提供者依赖相同)

3、编辑application.yml文件

 1 # 端口2 server:3   port: 79994 5 spring:6   application:7     name: cloud-order8   cloud:9     zookeeper:
10       connect-string: 127.0.0.1

4、编写主启动类

1 @SpringBootApplication
2 public class OrderMain7999 {
3     public static void main(String[] args) {
4         SpringApplication.run(OrderMain7999.class, args);
5     }
6 }

5、编辑配置类,注入RestTemplate对象

 1 @Configuration2 public class AppConfig {3 4     /**5      * 注入restTemplate,请用请求rest接口6      * @return7      */8     @Bean9     // 标注此注解后,RestTemplate就具有了客户端负载均衡能力
10     // 负载均衡技术依赖于的是Ribbon组件~
11     // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力
12     @LoadBalanced
13     public RestTemplate restTemplate(){
14         return new RestTemplate();
15     }
16 }

6、编辑Controller

 1 @RestController2 @Slf4j3 public class OrderController {4 5     public static final String PAYMENT_URL = "http://cloud-payment-service";6 7     @Autowired8     private RestTemplate restTemplate;9 
10     @GetMapping("/consumer/payment/zk")
11     public String paymentzk(){
12         return restTemplate.getForObject(PAYMENT_URL + "/payment/zk", String.class);
13     }
14 
15 }

7、启动项目测试

1)访问地址:http://localhost:7999/consumer/payment/zk

2)使用zookeeper客户端登录zookeeper服务器查看

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

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

相关文章

Ansible 自动化安装软件

例子如下&#xff1a; 创建一个名为/ansible/package.yml 的 playbook : 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上 将 dev 主机组中主机上的所有软件包更新为最新版本 --- - name:…

Python自动化测试代理程序可用性

在网络爬虫和数据采集过程中&#xff0c;代理服务器扮演着重要的角色。然而&#xff0c;代理服务器的可用性经常会受到影响&#xff0c;给爬虫工作带来一定的挑战。本文将介绍如何使用Python自动化测试代理程序的可用性&#xff0c;为您提供具备实际操作价值的解决方案。让我们…

【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战

五、ElasticSearch应用 1.ES 的Java API两种方式 Elasticsearch 的API 分为 REST Client API&#xff08;http请求形式&#xff09;以及 transportClient API两种。相比来说transportClient API效率更高&#xff0c;transportClient 是通过Elasticsearch内部RPC的形式进行请求…

Maven的超级POM

对于我们创建的一个maven工程&#xff0c;即便我们自己的pom.xm文件中没有明确指定一个父工程&#xff08;父POM&#xff09;&#xff0c;其实也默认继承了超级POM&#xff0c;就好比JAVA类继承Object类一样。 maven官网关于超级POM的介绍&#xff1a; https://maven.apache.o…

咸鱼之王俱乐部网站开发

我的俱乐部 最新兑换码 *注意区分大小写&#xff0c;中间不能有空格&#xff01; APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…

大数据 算法

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。这些数据集合通常包括结构化数据&#xff08;如数据库中的表格数据&#xff09;、半结构化数据&#xff08;如XML文件&#xff09;和非结构化数据&#xff08;如文本、音频和视频文件&#xff09;。大数据…

mysql-sql性能分析工具

一、sql执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff1a; -- session 是查看当前会话 ; -- global 是查询全…

Adobe Media Encoder软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Adobe Media Encoder是一款由Adobe公司开发的视频和音频后期制作软件&#xff0c;它集成了多种编码格式和输出选项&#xff0c;可以帮助用户将视频和音频文件转换成适合各种用途的格式。该软件可以与Adobe Premiere Pro、After …

stm32读写片内flash项目总结(多字节读写tongxindu)

1.flash操作驱动程序 a头文件 #ifndef FLASH_H #define FLASH_H #include “stm32f4xx.h” #define BOARD_NUM_ADDR 0x0800C000 #define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址 #define FLASH_WAITETIME 50000 //FLASH等待超时时间 //FLASH 扇区的起始地址…

excel中如果A列中某项有多条记录,针对A列中相同的项,将B列值进行相加合并统计

excel中如果A列中某项有多条记录&#xff0c;针对A列中相同的项&#xff0c;将B列值进行相加合并统计。注意&#xff1a;B列的数据类型要为数字 如&#xff1a; 实现方法&#xff1a; C1、D1中分别输入公式&#xff0c;然后下拉 IF(COUNTIF($A$1:A1,A1)1, A1,"") …

层叠上下文、层叠顺序

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 什么是层叠上下文 层叠上下文&#xff08;Stacking Context&#xff09;是指在 HTML 和 CSS 中&#xff0c;用于控制和管理元素层叠顺序以及呈现的一种机制。在一个网页中&#xff0c;许多元素&#xff08;例如文…

Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

一、简介 Rspack CLI 官方文档。 rspack.config.js 官方文档。 二、创建 vue 项目 创建项目&#xff08;文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式&#xff0c;根据需求进行选择&#xff09; # npm 方式 $ npm create rspacklatest# yarn 方式 $ yarn create…