4. 使用Ribbon实现客户端负载均衡,接上一篇:将服务注册到nacos中

接上一篇:3.将服务注册到nacos中


什么是负载均衡

通常来说,负载均衡就是将负载平衡到多个节点上
百度百科-负载均衡

根据负载均衡发生的位置可以分为: 服务器端负载均衡客户端负载均衡
两种负载均衡的解释

基于 Ribbon 实现负载均衡

1. Ribbon 简介

Rabbon 是 Netflix 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中, nacos一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从nacos中读 取到的服务信息,在调用服务节点提供的服务时,会根据策略进行负载。 在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的 列表信息,并基于内置的负载均衡算法,请求服务。

2. Ribbon 的主要作用

  • 服务调用

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


  • 负载均衡

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

3. 使用

1. 在RestTemplate 的生成方法上添加 @LoadBalanced 注解

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

2. 修改服务的调用方法
原本使用的是 http://ip地址:端口号/服务器地址 的方式进行调用远程方法
现在改为: http://服务名/服务器地址 的方式进行访问

例如:

Product product = restTemplate.getForObject("http://springboot-cloud-product/product/selectOne/1", Product.class);

说明:Product 等实体类在公共模块中存放,子项目引用公共模块,相当于每个模块中都有一份相同的实体类。


远程调用代码:

@RestController
@RequestMapping("order")
public class OrderController {
    /**
     * 服务对象
     */
    @Resource
    private OrderService orderService;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("addOne/{pid}")
    public Order addOne(@PathVariable("pid") Integer pid) {
        Product pro = restTemplate.getForObject("http://springboot-cloud-product/product/selectOne/1", Product.class);
        Order order = new Order();
        order.setPid(pid);
        order.setNumber(1);
        order.setPprice(pro.getPprice());
        order.setPname(pro.getPname());
        // TODO 用户信息需要登陆后获取
        order.setUid(1);
        order.setUsername("法外狂徒张三");
        return this.orderService.insert(order);
    }
}

4. 负载均衡策略

Ribbon 默认使用的负载均衡策略是轮询策略。
Ribbon 内置了许多的负载均衡策略。内部负载均衡的顶级接口为:com.netflix.loadbalancer.IRule


具体策略如图所示:
在这里插入图片描述

可以通过配置修改Ribbon的负载均衡策略,
请求方 或者叫做 调用方的 application 的配置文件中修改,这里使用yml格式


代码:

springboot-cloud-product:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

写这部分代码的时候,没有提示,防止写错,建议前边的复制,后边的进入到对应的规则类中,复制路径加类名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值