一、docker环境下部署zookeeper

1.下拉镜像

  1. docker pull zookeeper

2.部署容器

  1. docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest

二、SpringCloud向zookeeper中注册服务

1.引入jar包

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  4. </dependency>

2.完成pom文件内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.6.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>test-zookeeper</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>test-zookeeper</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>2021.0.1</spring-cloud.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.cloud</groupId>
  23. <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-web</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-actuator</artifactId>
  37. </dependency>
  38. </dependencies>
  39. <dependencyManagement>
  40. <dependencies>
  41. <dependency>
  42. <groupId>org.springframework.cloud</groupId>
  43. <artifactId>spring-cloud-dependencies</artifactId>
  44. <version>${spring-cloud.version}</version>
  45. <type>pom</type>
  46. <scope>import</scope>
  47. </dependency>
  48. </dependencies>
  49. </dependencyManagement>
  50. <build>
  51. <plugins>
  52. <plugin>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-maven-plugin</artifactId>
  55. </plugin>
  56. </plugins>
  57. </build>
  58. </project>

3.配置application.yml

  1. server:
  2. port: 8082
  3. # 服务别名---zookeeper注册中心名称
  4. spring:
  5. application:
  6. name: test-zookeeper
  7. cloud:
  8. zookeeper:
  9. connect-string: 192.168.87.128:2181 #zookeeper地址
  10. max-retries: 10

4.使用@EnableDiscoveryClient注解声明main方法

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. public class TestZookeeperApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(TestZookeeperApplication.class, args);
  6. }
  7. }

5.启动服务查看zookeeper中注册的服务

  1. 进入容器内容

    1. docker exec -it zookeeper zkCli.sh
  2. 查看注册的服务

    1. ls /services
  3. 此处注册了三个服务
    6.向zookeeper中注册服务,并实现调用 - 图1

三、微服务间方法调用

1. 声明RestTemplate模板

  1. @Configuration
  2. public class ApplicationContextConfig {
  3. @Bean
  4. @LoadBalanced
  5. public RestTemplate getRestTemplate(){
  6. return new RestTemplate();
  7. }
  8. }

2. 调用接口

  1. @RestController
  2. public class TestController {
  3. //微服务注册名称
  4. private static final String INVOKE_URL = "http://private-cloudzk8002";
  5. @Resource
  6. private RestTemplate restTemplate;
  7. @GetMapping(value = "paymentInfo")
  8. public String paymentInfo(){
  9. //微服务中接口路径
  10. String result = restTemplate.getForObject(INVOKE_URL + "/consumer/payment/zk", String.class);
  11. return result;
  12. }
  13. }

3.请求结果

6.向zookeeper中注册服务,并实现调用 - 图2
8082端口返回8002端口的接口信息,调用成功

总结

  1. 引入jar包,配置zookeeper的配置文件
  2. 使用@EnableDiscoveryClient注解声明main方法即可成功