环境:Spring Boot 2.3.9 + Spring Cloud Hoxton.SR8
关于zookeeper的安装配置参考《Kafka(zookeeper)环境配置超级详细 》
直接撸码
服务提供者
- 依赖
<properties>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- bootstrap.yml配置文件
spring:
cloud:
zookeeper:
connectString: localhost:2181,localhost:2182,localhost:2183
connectionTimeout: 3000
关于bootstrap.yml配置文件参考《SpringBoot配置文件你了解多少? 》
这里配置连接zookeeper,项目启动后会自动地连接到zookeeper。
- application.yml配置文件
server:
port: 8081
---
spring:
application:
name: zk-client
---
spring:
cloud:
loadbalancer:
ribbon:
enabled: false
这里关闭了ribbon,因为这个ribbon(netflix)处于维护阶段,本身当前的classpath中已经包含了loadbalancer组件。spring cloud 2020开始都移除了netflix相关的组件。
spring-cloud-starter-loadbalancer。loadbalancer是ribbon的替代品。
- 测试接口
@RestController
@RequestMapping("/producer")
public class ProducerController {
@Value("${server.port}")
private Integer port ;
@GetMapping("")
public String serviceUrl() {
return "我的端口是" + port ;
}
}
这里我启动了两个服务,端口分别是8080,8081。一会儿我们会通过另外一个服务来调用该接口看是否实现了负载均衡。
- 测试
zk-client服务启动两个端口分别是8080,8081。启动完后查看zookeeper中的信息。
zk-client已经注册上来了,再进入该节点查看
有两个客户端都连接上来了。
服务消费者
- 依赖,配置文件
依赖,配置文件都与上面的基本一样,只有spring.application.name=zk-consumer不一样
- RestTemplate配置类
@Configuration
public class WebConfig {
@Resource
private RestTemplateBuilder builder ;
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return builder.build() ;
}
}
注意:这样要应用到负载均衡必须在这里添加@LoadBalanced注解。
- 测试接口
@RestController
@RequestMapping("/balanced")
public class BalancedController {
@Resource
private DiscoveryClient discoveryClient;
@GetMapping("/get")
public Object serviceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("zk-client");
return list ;
}
}
该接口就是用来获取应用名(spring.application.name)为zk-client的所有实例信息
测试:
两个实例都获取到了。
接下来测试接口调用。
@Resource
private RestTemplate restTemplate ;
@GetMapping("/producer")
public Object invokeProducer() {
return restTemplate.getForObject("http://zk-client/producer", String.class) ;
}
注意:这里的host写的是被调用的服务名(spring.application.name)
测试:
页面轮流输出8080,8081。
完毕!!!
给个关注+转发如何?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/80043.html