场景
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所需的依赖
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
其他根据业务引入所需依赖,完整pom如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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"> <parent> <artifactId>SpringCloudDemo</artifactId> <groupId>com.badao</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-provider-payment8004</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <groupId>com.badao</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot整合zookeeper客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> </dependencies> </project>
新建并修改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服务提供者完整项目结构

3、启动8004项目,来到zookeeper上
交互式进入容器
docker exec -it 078de5ab4afd /bin/bash
这里的078..是zookeeper的容器id
进入到bin目录下,启动客户端
./zkCli.sh

ls列出所有节点,然后进入/services下查看到cloud-provider-payment已经注册成功

此时可以查看节点的详细信息
get /services/cloud-provider-payment/57f06ede-9795-4703-84b0-44295dd69c39
其中后面的编号是节点的流水号

此时在浏览器中访问服务提供者的接口
http://127.0.0.1:8004/payment/zk

则服务提供者注册进Zookeeper成功
4、服务消费者注册进Zookeeper
参考上面新建Eureka的服务消费者,再新建子模块cloud-consumerzk-order88

修改其pom文件同样加入
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
完整pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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"> <parent> <artifactId>SpringCloudDemo</artifactId> <groupId>com.badao</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-consumerzk-order88</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <groupId>com.badao</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot整合zookeeper客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> </dependencies> </project>
新建并修改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

然后浏览器中访问88的接口进行服务调用
http://127.0.0.1:88/consumer/payment/zk

浙公网安备 33010602011771号