目录
Zookeeper 介绍
创建 cloud-provider-payment8004 模块作为注册进 Zookeeper 的支付模块
创建 cloud-consumerzk-order80 模块作为注册进 Zookeeper 的消费者
Eureka 停止更新,我们可以采用 Zookeeper 来实现服务注册与发现功能,上图来自于
Home · Netflix/eureka Wiki · GitHub
Zookeeper 介绍
Zookeeper 是一个分布式协调工具,可以实现注册中心功能, 官网链接 ZooKeeper
安装 Zookeeper 软件在阿里云服务器中,启动 Zookeeper 软件
# 跳转到 Zookeeper 的 bin 目录下 cd /usr/local/zookeeper/apache-zookeeper-3.6.3-bin/bin/ # 打开 zkServer.sh ./zkServer.sh start # 打开客户端 zkCli.sh ./zkCli.sh
创建 cloud-provider-payment8004 模块作为注册进 Zookeeper 的支付模块
1、创建一个普通的maven 项目,添加POM 依赖
com.atyixuan cloud-api-commons1.0-SNAPSHOT org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.springframework.cloud spring-cloud-starter-zookeeper-discoveryorg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
2、application.yml 配置
server:
port: 8004
spring:
application:
# 微服务名称
name: cloud-provider-payment
cloud:
zookeeper:
# ip地址:端口号
connect-string: 服务器ip地址:2181
3、主启动类 com.atyixuan.springboot.PaymentMain8004
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
4、com.atyixuan.springboot.controller.PaymentController
import java.util.UUID;
@Slf4j
@RestController
public class PaymentController {
@Value("{server.port}")
private String serverPort;
@GetMapping(value = "/payment/zk")
public String paymentzk(){
return "spring cloud with zookeeper:"+serverPort+"t"+ UUID.randomUUID().toString();
}
}
5、测试:
# 启动 zkCli.sh 查询 zookeeper 当前的服务 [zk: localhost:2181(CONNECTED) 2] ls / [zookeeper]
启动微服务 cloud-provider-payment8004
[zk: localhost:2181(CONNECTED) 5] ls /
[services, zookeeper]
[zk: localhost:2181(CONNECTED) 6] ls /services/cloud-provider-payment
[0251d150-d0ee-4b4b-8a0b-30b645d38ecc]
[zk: localhost:2181(CONNECTED) 7] get /services/cloud-provider-payment/0251d150-d0ee-4b4b-8a0b-30b645d38ecc
{"name":"cloud-provider-payment","id":"0251d150-d0ee-4b4b-8a0b-30b645d38ecc","address":"PC-20210716NCEQ","port":8004,"sslPort":null,"payload":{"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance","id":"application-1","name":"cloud-provider-payment","metadata":{}},"registrationTimeUTC":1641916167230,"serviceType":"DYNAMIC","uriSpec":{"parts":[{"value":"scheme","variable":true},{"value":"://","variable":false},{"value":"address","variable":true},{"value":":","variable":false},{"value":"port","variable":true}]}}
将上述 get 的结果复制到 json 解码工具:json工具 - 在线工具 中进行解码,解码的结果
在浏览器中输入 http://localhost:8004/payment/zk
Zookeeper 的服务节点是临时的,没有Eureka 的自我保护机制,如果失去心跳包就会清楚掉注册进的微服务。
创建 cloud-consumerzk-order80 模块作为注册进 Zookeeper 的消费者
创建 cloud-consumerzk-order80让消费者也注册进 Zookeeper 中去
1、POM 文件:
com.atyixuan cloud-api-commons1.0-SNAPSHOT org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.springframework.cloud spring-cloud-starter-zookeeper-discoveryorg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
2、YML 文件
server:
port: 80
spring:
application:
# 微服务名称
name: cloud-consumer-order
cloud:
zookeeper:
# ip地址:端口号
connect-string: ip 地址:2181
3、主启动类 atyixuan.springboot.OrderZKMain80
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderZKMain80.class, args);
}
}
4、业务类:
4.1、Bean atyixuan.springboot.config.ApplicationContextConfig
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
4.2、atyixuan.springboot.controller.OrderZKController
@Slf4j
@RestController
public class OrderZKController {
public static final String INVOKE_URL = "http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/zk")
public String paymentInfo() {
return restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
}
}
项目结构图
5、测试
先启动 cloud-provider-payment8004,再启动 cloud-consumerzk-order80
浏览器中输入:http://localhost/consumer/payment/zk
浏览器输入:http://localhost:8004/payment/zk



