环境搭建

服务注册

  1. 创建maven工程

  2. 添加pom依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.study</groupId>
    8. <artifactId>cloud-api-commons</artifactId>
    9. <version>1.0-SNAPSHOT</version>
    10. </dependency>
    11. <!-- 加入Zookeeper的starter -->
    12. <dependency>
    13. <groupId>org.springframework.cloud</groupId>
    14. <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    15. <exclusions>
    16. <!-- 默认用的是3.5.3 -->
    17. <exclusion>
    18. <groupId>org.apache.zookeeper</groupId>
    19. <artifactId>zookeeper</artifactId>
    20. </exclusion>
    21. </exclusions>
    22. </dependency>
    23. <!-- 加入对应版本的zookeeper依赖 -->
    24. <dependency>
    25. <groupId>org.apache.zookeeper</groupId>
    26. <artifactId>zookeeper</artifactId>
    27. <version>3.5.9</version>
    28. </dependency>
    29. <dependency>
    30. <groupId>org.springframework.boot</groupId>
    31. <artifactId>spring-boot-devtools</artifactId>
    32. <scope>runtime</scope>
    33. <optional>true</optional>
    34. </dependency>
    35. <dependency>
    36. <groupId>org.projectlombok</groupId>
    37. <artifactId>lombok</artifactId>
    38. </dependency>
    39. </dependencies>
  1. 修改yaml配置
    server:
    port: 8004
    spring:
    application:
     name: cloud-provider-payment
    cloud:
       # 加入zookeeper配置
     zookeeper:
       connect-string: 192.168.29.137:2181,192.168.29.137:2182,192.168.29.137:2183
    
  1. 配置主启动类
    @SpringBootApplication
    // 加入zookeeper的服务发现客户端
    @EnableDiscoveryClient
    public class PaymentMain8004 {
     public static void main(String[] args) {
         SpringApplication.run(PaymentMain8004.class, args);
     }
    }
    
  1. 编写一个Controller用于测试

    @RestController
    @Slf4j
    public class PaymentController {
    
     @Value("${server.port}")
     private String serverPort;
    
     @RequestMapping("/payment/zk")
     public String paymentZK() {
         return "springcloud with zookeeper: " + serverPort + "\t" + UUID.randomUUID().toString();
     }
    }
    

启动主启动类后,会在ZooKeeper中生成对应的节点:(创建的节点类型是临时节点)

  • services

    • cloud-provider-payment(模块的spring.application.name)

      • UUID流水号

访问该流水号节点数据:

{
    "name": "cloud-provider-payment",
    "id": "470b94bb-2009-4c5b-ad47-d03236c4aaa3",
    "address": "cold-thunder",
    "port": 8004,
    "sslPort": null,
    "payload": {
        "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
        "id": "application-1",
        "name": "cloud-provider-payment",
        "metadata": {}
    },
    "registrationTimeUTC": 1616057576007,
    "serviceType": "DYNAMIC",
    "uriSpec": {
        "parts": [
            {
                "value": "scheme",
                "variable": true
            },
            {
                "value": "://",
                "variable": false
            },
            {
                "value": "address",
                "variable": true
            },
            {
                "value": ":",
                "variable": false
            },
            {
                "value": "port",
                "variable": true
            }
        ]
    }
}

访问controller,可正常得到响应。

服务消费

  1. 创建maven工程

  2. 引入pom依赖(同注册的服务引入的依赖)

  3. 编写yaml配置 ```yaml server: port: 80

spring: application: name: cloud-consumer-order-zk cloud: zookeeper: connect-string: 192.168.29.137:2181,192.168.29.137:2182,192.168.29.137:2183



4. 
编写主配置
```java
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderZKMain80.class, args);
    }
}
  1. 编写Configuration注入RestTemplate

    @Configuration
    public class ApplicationContextConfig {
    
     @Bean
     @LoadBalanced
     public RestTemplate getRestTemplate() {
         return new RestTemplate();
     }
    }
    
  1. 编写Controller调用注册的服务

    @RestController
    @Slf4j
    public class OrderZKController {
    
     @Autowired
     private RestTemplate restTemplate;
    
     // 注册的服务的服务名
     public static final String INVOKE_URL = "http://cloud-provider-payment";
    
     @GetMapping("/consumer/payment/zk")
     public String paymentInfo() {
         String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
         return result;
     }
    }
    

访问http://localhost/consumer/payment/zk进行验证