SpringCloud中集成Zookeeper实现服务注册与发现
场景
SpringCloud中集成Eureka实现服务注册(单机Eureka构建):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124688609
SpringCloud中集成Eureka实现集群部署服务注册与服务提供者:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124710576
SpringCloud中集成Eureka时通过Discovery实现服务发现:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124725905
上面通过Eureka进行服务注册与发现的基础上,如果要将服务注册中心更改为Zookeeper要怎么实现。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、Zookeeper搭建
Docker中Zookeeper、Kafka的安装与发送和消费消息:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124308163
这里是通过docker快速搭建,如果需要其他安装方式自行研究。
搭建成功之后开放服务器上的zookeeper默认的2181端口。
2、服务提供者集成Zookeeper
参考上面新建Eureka客户端的过程,在父模块下新建cloud-provider-payment8004模块
修改pom文件,引入zookeeper所需的依赖
org.springframework.cloud
spring-cloud-starter-zookeeper-discovery
其他根据业务引入所需依赖,完整pom如下
<?xml version="1.0" encoding="UTF-8"?>"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> SpringCloudDemo com.badao 1.0-SNAPSHOT 4.0.0 cloud-provider-payment8004 8 8 com.badao cloud-api-commons ${project.version} org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-zookeeper-discovery
新建并修改application.yml
#8004表示注册到zookeeper服务器的支付服务提供者端口号 server: port: 8004 #服务别名----注册zookeeper到注册中心名称 spring: application: name: cloud-provider-payment cloud: zookeeper: connect-string: 自己的zookeeper的ip:2181
将这里的ip改为自己的zookeeper的地址
新建主启动类PaymentMain8004,并在启动类上添加@EnableDiscoveryClient注解
package com.badao.springclouddemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务 public class PaymentMain8004 { public static void main(String[] args) { SpringApplication.run(PaymentMain8004.class, args); } }
新建controller,并开放接口返回一个UUID
package com.badao.springclouddemo.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.UUID; @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服务提供者完整项目结构
ls列出所有节点,然后进入/services下查看到cloud-provider-payment已经注册成功
此时可以查看节点的详细信息
get /services/cloud-provider-payment/57f06ede-9795-4703-84b0-44295dd69c39
其中后面的编号是节点的流水号
则服务提供者注册进Zookeeper成功
4、服务消费者注册进Zookeeper
参考上面新建Eureka的服务消费者,再新建子模块cloud-consumerzk-order88
修改其pom文件同样加入
org.springframework.cloud
spring-cloud-starter-zookeeper-discovery
完整pom文件
<?xml version="1.0" encoding="UTF-8"?>"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> SpringCloudDemo com.badao 1.0-SNAPSHOT 4.0.0 cloud-consumerzk-order88 8 8 com.badao cloud-api-commons ${project.version} org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-zookeeper-discovery
新建并修改application.yml
server: port: 88 #服务别名----注册zookeeper到注册中心名称 spring: application: name: cloud-consumer-order cloud: zookeeper: connect-string: 自己的zookeeper的ip:2181
新建主启动类并添加注解@EnableDiscoveryClient
package com.badao.springclouddemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class OrderZKMain88 { public static void main(String[] args) { SpringApplication.run(OrderZKMain88.class, args); } }
为了实现服务调用,添加RestTemplate的配置文件
package com.badao.springclouddemo.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
新建Controller
package com.badao.springclouddemo.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; @RestController @Slf4j 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() { String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class); return result; } }
其中这里的URL就是上面服务提供者的别名
完整88服务消费者目录
启动88服务消费者
来到zookeeper上查看services上,注册成功
ls /services