美文网首页
02基于Ribbon的服务调用和负载均衡

02基于Ribbon的服务调用和负载均衡

作者: 攻城老狮 | 来源:发表于2021-01-01 18:48 被阅读0次

一 Ribbon相关概念

1.1 简单描述

在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的 列表信息,并基于内置的负载均衡算法,请求服务。属于客户端的负载均衡(区别于ngnix的服务端负载均衡,客户端负载均衡:客户端会有一个服务器地址列表,在多个可选请求路径中通过算法选择其中一个发送请求,服务端负载均衡:接收到客户端发送的请求后在多个服务器中选择一台作为响应,两者有本质区别)

1.2 Ribbon的主要作用

  • 服务调用

基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助 RestTemplate 最终进行调用。

  • 负载均衡

当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址。

二 基于Ribbon实现产品服务的调用

2.1 服务提供者 product模块的改造

为了便于查看负载均衡是否执行成功,需要对服务提供者相关方法进行改写。

  1. 引入pom文件,由于eureka已经引入了ribbon的依赖,故不需要手动引入
  2. 修改controller中的findById()方法
@Value("${server.port}")
private String port;

@Value("${spring.cloud.client.ip-address}")
private String ip;

@GetMapping("/{id}")
public Product findById(@PathVariable Long id) {
    Product product = productService.findById(id);
    product.setProductDesc("调用product服务的ip:" + ip + " port: " + port);
    return product;
}
  1. 修改yaml文件的端口号,使用idea模拟第二台服务

2.2 服务调用者order模块的改造

  1. 在配置类的resttemplate注入方法的上面添加注解
//标识性注解,使得向restTemplate中增添了一个ribbon的拦截器做相关负载均衡的处理
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}
  1. 修改controller中的方法,使用restTemplate方法调用服务名称
@RestController
@RequestMapping("/order")
public class OrderController {

    //注入restTemplate
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/{id}")
    public Product getProductById(@PathVariable Long id){
        //直接调用在eureka中注册的product服务
        Product product = restTemplate.getForObject("http://product/product/" + id, Product.class);
        return product;
    }
}
  1. 测试可以发现默认是轮询算法的负载均衡策略

三 Ribbon负载均衡策略

Ribbon内置了多种负载均衡策略

  • 修改负载均衡策略,只需要在服务调用端的yaml配置文件做相应的配置即可
##需要调用的微服务名称
product:
 ribbon:
   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

相关文章

网友评论

      本文标题:02基于Ribbon的服务调用和负载均衡

      本文链接:https://www.haomeiwen.com/subject/fsijoktx.html