Cloud技术栈

Linux安装Zookeeper

zookeeper是一个分布式协调工具,可以实现注册中心功能

zookeeper服务器取代Eureka服务器,zk作为服务注册中心

windows安装可以看https://www.kylin.show/1129.html

Zookeeper官网https://zookeeper.apache.org/

image-20200706213812897

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

image-20200706213833499

下载后安装上传到Linux系统中,解压即可tar -zxvf 压缩包名

解压zookeeper,运行/bin/zkServer.sh ,初次运行会报错,没有zoo.cfg配置文件。zoo_sample.cfg复制一份并改名成zoo.cfg即可

接着cd到bin目录sh zkServer.sh start运行zookeeper,运行在2181端口。(记得开放端口)

image-20200706214835671

sh zkServer.sh status查看运行状态

使用sh zkCli.sh连接zookeeper

image-20200706215201178

安装完成!

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

当前只有zookeeper一个节点

image-20200707070859082

服务提供者注册

新建cloud-provider-payment8004

image-20200707065437023

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><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
<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>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<!--添加zookeeper3.4.14版本-->
<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

image-20200707065749999

1
2
3
4
5
6
7
8
9
10
11
#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
port: 8004

#服务别名---注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: icloud.kylin.show:2181 #zookepper服务地址

主启动类

使用@EnableDiscoveryClient注解,该注解1.可以获取服务信息,2.用于向consul或者zookeeper作为注册中心的时候提供注册服务。

image-20200707070353496

1
2
3
4
5
6
7
8
9
@SpringBootApplication
//用于向consul或者zookeeper作为注册中心的时候提供注册服务
@EnableDiscoveryClient
public class PaymentMain8004 {

public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}

controller

image-20200707070544025

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();
}
}

测试

启动进行测试

image-20200707071642573

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

image-20200707071720440

查看该节点ls /services

image-20200707071802620

注册成功,继续深挖

image-20200707072125090

可以看到该节点的详细信息,端口号,地址等等

访问http://localhost:8004/payment/zk查看

GIF719

全部正常,测试成功!

临时节点

服务节点是临时节点还是持久节点?我们先关掉8004,然后等待一段时间,查看zookeeper节点

image-20200707072637346

image-20200707072726507

可以发现已经没有相关信息了,是临时节点

重新启动,查看节点

image-20200707072928051

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

image-20200707072946679

服务消费者注册

新建cloud-consumerzk-order80

image-20200707073207139

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><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
<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>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<!--先排除自带的zookeeper3.5.3-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.14版本-->
<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

image-20200707073403347

1
2
3
4
5
6
7
8
9
10
server:
port: 80

spring:
application:
name: cloud-consumer-order
cloud:
#注册到zookeeper地址
zookeeper:
connect-string: icloud.kylin.show:2181

主启动类

image-20200707074321293

@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

image-20200707074621187

1
2
3
4
5
6
7
8
9
@Configuration
public class ApplicationContextConfig {

@Bean
@LoadBalanced//使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}

controller

使用RestTemplate调用服务

image-20200707074749268

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启动)

image-20200707074954966

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

image-20200707075023505

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

GIF751

成功!

篇幅较短,主要重点是Nacos