Ribbon

128 阅读2分钟

这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战

Ribbon

是 Netflflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。

在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务

在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这里不需要导入任何额外的坐标

在代码的修改上也是十分简单,在创建RestTemplate 的时候添加@LoadBalanced 注解,在请求的时候http://服务名/product/1

@LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
@RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
    public Product findById(@PathVariable int id){
        //根据元数据中的主机地址和端口号拼接请求微服务的URL
        Product forObject = restTemplate.getForObject("http://service-product/product/1", Product.class);
​
        return forObject;
    }

负载均衡

在搭建网站时,如果单节点的 web服务性能和可靠性都无法达到要求;或者是在使用外网服务时,经常担心被人攻破,一不小心就会有打开外网端口的情况,通常这个时候加入负载均衡就能有效解决服务问题。

负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。

负载均衡的应用场景包括流量包、转发规则以及后端服务,由于该服务有内外网个例、健康检查等功能,能够有效提供系统的安全性和可用性。

测试

首先需要准备两个商品微服务,我们还是用的老办法,就是复制我们的服务配置,然后,修改端口启动

image.png

我们添加@LoadBalanced 注解之后就默认开启了我们负载均衡,我们直接测试就可以

为了我们能更直观的看到我们的测试,在商品服务我们添加两个属性

    @Value("${server.port}")
    private String port;
​
    @Value("${spring.cloud.client.ip-address}")
    private String ip;
product.setProductName("访问的服务地址"+ip+":"+port);

并把它存到我们对象中去

image_1.png

image_2.png 修改负载均衡策略

product-service:
  ribbon:
    # 这里采用随机访问,要修改其它的策略,把全类名换掉即可
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

\