这是我参与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服务性能和可靠性都无法达到要求;或者是在使用外网服务时,经常担心被人攻破,一不小心就会有打开外网端口的情况,通常这个时候加入负载均衡就能有效解决服务问题。
负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。
负载均衡的应用场景包括流量包、转发规则以及后端服务,由于该服务有内外网个例、健康检查等功能,能够有效提供系统的安全性和可用性。
测试
首先需要准备两个商品微服务,我们还是用的老办法,就是复制我们的服务配置,然后,修改端口启动
我们添加@LoadBalanced 注解之后就默认开启了我们负载均衡,我们直接测试就可以
为了我们能更直观的看到我们的测试,在商品服务我们添加两个属性
@Value("${server.port}")
private String port;
@Value("${spring.cloud.client.ip-address}")
private String ip;
product.setProductName("访问的服务地址"+ip+":"+port);
并把它存到我们对象中去
修改负载均衡策略
product-service:
ribbon:
# 这里采用随机访问,要修改其它的策略,把全类名换掉即可
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
\