
Linux安装Zookeeper
zookeeper是一个分布式协调工具,可以实现注册中心功能
zookeeper服务器取代Eureka服务器,zk作为服务注册中心
windows安装可以看https://www.kylin.show/1129.html
Zookeeper官网https://zookeeper.apache.org/

下载地址https://zookeeper.apache.org/releases.html

下载后安装上传到Linux系统中,解压即可tar -zxvf 压缩包名
解压zookeeper,运行/bin/zkServer.sh ,初次运行会报错,没有zoo.cfg配置文件。将zoo_sample.cfg
复制一份并改名成zoo.cfg
即可
接着cd到bin目录sh zkServer.sh start
运行zookeeper,运行在2181端口。(记得开放端口)

sh zkServer.sh status
查看运行状态
使用sh zkCli.sh
连接zookeeper

安装完成!
- 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
- 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
- 创建文件,并设置初始内容: create /zk “test” 创建一个新的 znode节点“ zk ”以及与它关联的字符串
- 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
- 修改文件内容: set /zk “zkbak” 对 zk 所关联的字符串进行设置
- 删除文件: delete /zk 将刚才创建的 znode 删除
- 退出客户端: quit
- 帮助命令: help
当前只有zookeeper一个节点

服务提供者注册
新建cloud-provider-payment8004

pom
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <dependencies> <dependency> <groupId>com.kylin</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
|
yml

1 2 3 4 5 6 7 8 9 10 11
| server: port: 8004
spring: application: name: cloud-provider-payment cloud: zookeeper: connect-string: icloud.kylin.show:2181
|
主启动类
使用@EnableDiscoveryClient
注解,该注解1.可以获取服务信息,2.用于向consul或者zookeeper作为注册中心的时候提供注册服务。

1 2 3 4 5 6 7 8 9
| @SpringBootApplication
@EnableDiscoveryClient public class PaymentMain8004 {
public static void main(String[] args) { SpringApplication.run(PaymentMain8004.class, args); } }
|
controller

1 2 3 4 5 6 7 8 9 10 11 12
| @RestController public class PaymentController {
@Value("${server.port}") private String serverPort;
@RequestMapping("/payment/zk") public String paymentzk(){ return "SpringCloud with zookeeper:" + serverPort+"\t"+ UUID.randomUUID().toString(); } }
|
测试
启动进行测试

ls /
查看zookeeper,多了一个services
节点

查看该节点
ls /services

注册成功,继续深挖

可以看到该节点的详细信息,端口号,地址等等
访问http://localhost:8004/payment/zk
查看

全部正常,测试成功!
临时节点
服务节点是临时节点还是持久节点?我们先关掉8004,然后等待一段时间,查看zookeeper节点


可以发现已经没有相关信息了,是临时节点
重新启动,查看节点

成功注册,并且有了一个新的流水号

服务消费者注册
新建cloud-consumerzk-order80

pom
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| <dependencies> <dependency> <groupId>com.kylin</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
|
yml

1 2 3 4 5 6 7 8 9 10
| server: port: 80
spring: application: name: cloud-consumer-order cloud: zookeeper: connect-string: icloud.kylin.show:2181
|
主启动类

@EnableDiscoveryClient这里作用是如果要用到服务发现功能
1 2 3 4 5 6 7 8
| @SpringBootApplication @EnableDiscoveryClient public class OrderZKMain80 {
public static void main(String[] args) { SpringApplication.run(OrderZKMain80.class,args); } }
|
RestTemplate
配置RestTemplate,编写ApplicationContextConfig
类

1 2 3 4 5 6 7 8 9
| @Configuration public class ApplicationContextConfig {
@Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
|
controller
使用RestTemplate调用服务

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @RestController @Slf4j public class OrderZKController {
public static final String INVOKE_URL = "http://cloud-provider-payment";
@Resource private RestTemplate restTemplate;
@GetMapping("/consumer/payment/zk") public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result; } }
|
测试
启动ZK80(8004启动)

查看zookeeper注册中心,服务消费者成功注册

访问http://localhost/consumer/payment/zk

成功!
篇幅较短,主要重点是Nacos