Spring Cloud Alibaba 学习 -- 2、R

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

学习视频(B站):www.bilibili.com/video/BV1Mt…

GitHub 源码地址:github.com/tyronczt/sp…

简介:

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。

整合ribbon

由于在consumer的pom中已经引入 spring-cloud-starter-alibaba-nacos-discovery , 它已经引入ribbon:

1
2
3
4
5
6
xml复制代码<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.2.RELEASE</version>
<scope>compile</scope>
</dependency>

所以只需要在 restTemplate 的 bean 中添加 @LoadBalanced 注解,即可以使用ribbon

1
2
3
4
5
6
7
8
9
10
java复制代码@Configuration
public class ConsumerConfig {

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}

}

ConsumerController 调用接口,默认采用 轮询 方式

1
2
3
4
5
6
7
8
9
10
11
java复制代码@RestController
public class ConsumerController {

@Autowired
private RestTemplate restTemplate;

@GetMapping("/index")
public String index() {
return "consumer远程调用provier:" + this.restTemplate.getForObject("http://provider/index", String.class);
}
}

设置调用方式为 随机【只需在yml配置文件中添加已经定好的规则即可】:

1
2
3
yml复制代码provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

设置调用方式为 Nacos 权重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
java复制代码@Slf4j
public class NacosWeightedRule extends AbstractLoadBalancerRule {

@Autowired
private NacosDiscoveryProperties nacosDiscoveryProperties;

@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
//读取配置文件
}

@Override
public Server choose(Object o) {
ILoadBalancer loadBalancer = this.getLoadBalancer();
BaseLoadBalancer baseLoadBalancer = (BaseLoadBalancer) loadBalancer;
//获取要请求的微服务名称
String name = baseLoadBalancer.getName();
//获取服务发现的相关API
NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
try {
Instance instance = namingService.selectOneHealthyInstance(name);
log.info("选择的实例是port={},instance={}",instance.getPort(),instance);
return new NacosServer(instance);
} catch (NacosException e) {
e.printStackTrace();
return null;
}
}
}

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%