🔰 学习视频 🔰
尚硅谷SpringCloud框架开发教程(SpringCloudAlibaba微服务分布式架构丨Spring Cloud)
集数:28—30
🔰 学习格言 🔰
不在能知,乃在能行。
🔰 学习笔记 🔰
文章目录
一、Zookeeper
系列笔记:Zookeeper
【Zookeeper】介绍、安装和参数配置
【Zookeeper】集群配置、操作、选举机制、启动停止脚本、客户端命令操作、写数据流程
启动一台Zookeeper服务器(或虚拟机),关闭防火墙。
二、服务提供者
2.1 新建maven项目
新建mavern项目cloud-provider-payment8004
2.2 POM
pom中的依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.zqc.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>true</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
2.3 application.yml
注意修改ip地址
server:
port: 8004
# 服务别名——注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 192.168.150.101:2181
2.4 主启动类
@SpringBootApplication
@EnableDiscoveryClient // 该注解用于向使用consul或zookeeper作为注册中心时注册服务
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
2.5 controller
显示当前zookeeper端口号,没其他功能。
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/zk")
public String paymentzk() {
return "springcloud with zookeeper: " + serverPort + "\t" + UUID.randomUUID().toString();
}
}
2.6 启动8004注册进zookeeper
🔶 步骤1:启动虚拟机内的zookeeper
./zkServer.sh start
🔶 步骤2:启动客户端
如果配置了zookeeper集群,记得要将所有的服务器启动。
./zkCli.sh
🔶 步骤3:运行主启动类,启动服务。
启动成功后,可在zookeeper服务器新增services节点。
[zk: localhost:2181(CONNECTED) 8] ls /
[services, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /services
[cloud-provider-payment]
[zk: localhost:2181(CONNECTED) 2] ls /services/cloud-provider-payment
[fab07688-58f9-46da-8fc2-498bc59d5251]
[zk: localhost:2181(CONNECTED) 4] get /services/cloud-provider-payment/fab07688-58f9-46da-8fc2-498bc59d5251
{"name":"cloud-provider-payment","id":"fab07688-58f9-46da-8fc2-498bc59d5251","address":"DESKTOP-UGCFAQN","port":8004,"sslPort":null,"payload":{"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance","id":"application-1","name":"cloud-provider-payment","metadata":{}},"registrationTimeUTC":1636684198438,"serviceType":"DYNAMIC","uriSpec":{"parts":[{"value":"scheme","variable":true},{"value":"://","variable":false},{"value":"address","variable":true},{"value":":","variable":false},{"value":"port","variable":true}]}}
使用json工具,可清楚的看到这些信息。
{
"name": "cloud-provider-payment",
"id": "fab07688-58f9-46da-8fc2-498bc59d5251",
"address": "DESKTOP-UGCFAQN",
"port": 8004,
"sslPort": null,
"payload": {
"@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
"id": "application-1",
"name": "cloud-provider-payment",
"metadata": {}
},
"registrationTimeUTC": 1636684198438,
"serviceType": "DYNAMIC",
"uriSpec": {
"parts": [
{
"value": "scheme",
"variable": true
},
{
"value": "://",
"variable": false
},
{
"value": "address",
"variable": true
},
{
"value": ":",
"variable": false
},
{
"value": "port",
"variable": true
}
]
}
}
如果出现zookeeper版本jar包冲突问题,需要保证zk服务器的版本,与服务使用的zk版本一致。修改pom.xml中的zookeeper,排除starter中的zookeeper,自己添加指定版本的zookeeper
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!-- 先排除自带的zookeeper3.5.3-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加zookeepers3.5.7-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.7</version>
</dependency>
🔶 测试
浏览器访问:http://localhost:8004/payment/zk
结果:
springcloud with zookeeper: 8004 36ba77e0-8ea5-4692-80a5-5103117d3947
2.7 临时节点
刚刚注册的服务是临时节点,如果服务关闭了,超过了心跳时间,zookeeper会删除该服务的节点。、
启动服务后,关闭服务,在启动服务。可以在zookeeper服务中查看到。
[zk: localhost:2181(CONNECTED) 8] ls /services/cloud-provider-payment
[fab07688-58f9-46da-8fc2-498bc59d5251]
[zk: localhost:2181(CONNECTED) 9] ls /services/cloud-provider-payment
[fab07688-58f9-46da-8fc2-498bc59d5251]
[zk: localhost:2181(CONNECTED) 10] ls /services/cloud-provider-payment
[]
[zk: localhost:2181(CONNECTED) 11] ls /services/cloud-provider-payment
[]
[zk: localhost:2181(CONNECTED) 12] ls /services/cloud-provider-payment
[16d95111-8894-40ac-928c-f9cb89f38a8c]
[zk: localhost:2181(CONNECTED) 13] ls /services/cloud-provider-payment
[16d95111-8894-40ac-928c-f9cb89f38a8c]
三、服务消费者
3.1 新建maven项目
cloud-consumerzk-order80
3.2 POM
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.zqc.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>true</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
3.3 application.yml
server:
port: 80
spring:
application:
name: cloud-consumer-order
cloud:
# 注册到zookeeper地址
zookeeper:
connect-string: 192.168.150.101:2181
3.4 主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderZKMain80.class, args);
}
}
3.5 业务类
3.5.1 ApplicationContextConfig
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
3.5.2 OrderZKController
@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;
}
}
3.6 运行测试
🔸 运行8004和80服务,在zookeeper服务器上可查看到:
[zk: localhost:2181(CONNECTED) 15] ls /services
[cloud-consumer-order, cloud-provider-payment]
说明消费者和提供者都已经注册完毕。
🔸 浏览器访问:http://localhost:8004/payment/zk
调用成功,结果:
springcloud with zookeeper: 8004 af5a16a3-d1ae-4568-ad13-de0bb2a3c176
🔸 浏览器访问:http://localhost/consumer/payment/zk
调用成功,结果:
springcloud with zookeeper: 8004 d834bdab-19d3-4770-b0f2-48a0a1b18d6d