环境搭建
服务注册
创建maven工程
添加pom依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.study</groupId><artifactId>cloud-api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- 加入Zookeeper的starter --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId><exclusions><!-- 默认用的是3.5.3 --><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion></exclusions></dependency><!-- 加入对应版本的zookeeper依赖 --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.5.9</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
- 修改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
- 配置主启动类
@SpringBootApplication // 加入zookeeper的服务发现客户端 @EnableDiscoveryClient public class PaymentMain8004 { public static void main(String[] args) { SpringApplication.run(PaymentMain8004.class, args); } }
编写一个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,可正常得到响应。
服务消费
创建maven工程
引入pom依赖(同注册的服务引入的依赖)
编写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);
}
}
编写Configuration注入RestTemplate
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
编写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; } }
