SpringCloud学习笔记
SpringCloud整合Zookeeper代替Eureka
注册中心Zookeeper
- Zookeeper是一个分布式协调工具,可以实现注册中心功能
- 关闭Linux服务器防火墙后启动Zookeeper服务器
- Zookeeper服务器取代Eureka服务器,zk作为服务注册中心
服务提供者
需注意:Zookeeper我是在虚拟机centos中安装的,版本3.5.8,在pom文件已经剔除掉原来的自带的Zookeeper版本。
- 新建cloud-provider-payment8004
- 修改pom文件
<dependencies>
<!-- 引入自定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>pers.chao.springcloud</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>
<!-- 引入zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--排除自带的zookeeper 3.5.3-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper 3.4.14版本,和zookeeper服务器版本一致-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.8</version>
</dependency>
</dependencies>
- 修改application.yml文件
server:
port: 8004
# 服务别名---zookeeper注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 192.168.183.128:2181
- 写启动类
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者Zookeeper作为服务注册中心时注册服务
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class,args);
}
}
- 写业务类
@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();
}
}
-
启动8004注册进Zookeeper
-
验证测试1
-
验证测试2
获得json串后用在线工具查看
我们根据查看Zookeeper的流水号(就是那一串长长的数字,也就是节点),服务注册进Zookeeper的信息
我们通过在线工具链接: tool工具.,查看该json串
{
"name": "cloud-provider-payment",
"id": "563e27b4-2715-4bfc-bf9f-81f0736180f6",
"address": "LAPTOP-BI05N0LP",
"port": 8004,
"sslPort": null,
"payload": {
"@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
"id": "application-1",
"name": "cloud-provider-payment",
"metadata": {}
},
"registrationTimeUTC": 1609162186341,
"serviceType": "DYNAMIC",
"uriSpec": {
"parts": [
{
"value": "scheme",
"variable": true
},
{
"value": "://",
"variable": false
},
{
"value": "address",
"variable": true
},
{
"value": ":",
"variable": false
},
{
"value": "port",
"variable": true
}
]
}
}
该json串正是服务注册进Zookeeper的信息
- 思考-服务节点是临时节点还是持久节点
当我们立即关停掉8004服务,Zookeeper立马就剔除掉8004,所以服务节点是临时节点
当我们重新启动8004服务,又立马注册进了Zookeeper
服务消费者
- 新建cloud-consumerzk-order80
- 修改pom文件
和8004依赖相同 - 修改application.yml文件
# 88服务微服务消费者端口
server:
port: 88
# 服务别名---zookeeper注册中心名称
spring:
application:
name: cloud-consumer-order
cloud:
zookeeper:
connect-string: 192.168.183.128:2181
- 写启动类
- 写业务类
和前面章节一样,需要配置RestTemplate
@RestController
@Slf4j
public class OrderZKController {
public static final String INVOKE_URL="http://cloud-provider-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/zk")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result;
}
}
-
验证测试
-
访问测试地址
服务提供者8004
服务消费者88
也成功调用