【什么是Ribbon】
【Ribbon在微服务中扮演的角色】
【通信的三种方式】
【准备工作】
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
server:
port: 7000
spring:
application:
name: ribbon-producer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 7002
spring:
application:
name: ribbon-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
【方式一:DiscoveryClient】
@Resource
private DiscoveryClient discoveryClient;
/**
* 使用DiscoveryClient获取服务列表进行随机服务调用(http://localhost:7002/consumer/discoveryClient)
*/
@GetMapping("/discoveryClient")
public String discoveryClient() {
log.info("discoveryClient invoke!");
// 获得服务id下的服务信息
List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("ribbon-producer");
serviceInstanceList.forEach(serviceInstance -> log.info("host={}, port={}, uri={}",
serviceInstance.getHost(), serviceInstance.getPort(), serviceInstance.getUri()));
// 自实现具体服务的请求
int num = new Random().nextInt(serviceInstanceList.size());
URI uri = serviceInstanceList.get(num).getUri();
log.info("num={}, uri={}", num, uri);
return restTemplate.getForObject( uri + "/provider/hello", String.class);
}
【方式二:LoadBlanceClient】
@Resource
private LoadBalancerClient loadBalancerClient;
/**
* 使用LoadBalancerClient自带的负载均衡功能执行服务调用
*(http://localhost:7002/consumer/loadBalancerClient)
*/
@GetMapping("/loadBalancerClient")
public String loadBalancerClient() {
log.info("loadBalancerClient invoke!");
// 获得负载均衡实例
ServiceInstance serviceInstance = loadBalancerClient.choose("ribbon-producer");
log.info("uri={}", serviceInstance.getUri());
return restTemplate.getForObject(serviceInstance.getUri()+"/provider/hello", String.class);
}
【方式三:@LoadBalanced】
@Bean
@LoadBalanced // 增加LoadBalanced注解
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* 使用@LoadBalanced修饰的RestTemplate来执行具有负载均衡功能的服务调用
*(http://localhost:7002/consumer/loadBalancerAnnotation)
*/
@GetMapping("/loadBalancerAnnotation")
public String loadBalancerAnnotation() {
log.info("loadBalancerAnnotation invoke!");
// 获得负载均衡实例
return restTemplate.getForObject("http://ribbon-producer/provider/hello", String.class);
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有