Author: Gorit Date:2021年1月 Refer:阿里云大学 2021年发表博文: 12/50
什么是本地负载均衡器:我们的消费者从我们的注册中心上获取接口调用地址列表。 本地实现负载均衡算法(轮询,随机、hash一致性、权重)等原理:获取接口地址列表,采用算法获取选择一个接口地址实现本地 rpc 远程调用
本地负载均衡器:
ribbon ? loadbalancer?
SpringCloud Rest 或者 Openfeign 都是默认支持 ribbon
Nginx 属于服务器端负载均衡器。客户端所有的请求都统一交给 Nginx,再有 Nginx 转发到真实的服务器实现负载均衡
本地负载均衡器:属于客户端负载均衡
Nginx 实现负载均衡与本地实现负载均衡器应用场景
SpringCloud 中 rest 或者 openfeign客户端默认都是使用 ribbon 实现负载均衡器
在 restTemplate 注入的方法加上 @LoadBalanced 注解
@Bean
@LoadBalanced // 解决无法使用 http://服务名/接口名 实现 rpc 远程调用
public RestTemplate restTemplate() {
return new RestTemplate();
}
在 orderService 中新增一个方法
/**
* 基于 ribbon 实现本地负载均衡
* @return
*/
@GetMapping("/ribbon/order")
public Object getOrderToRibbonUser() {
String result = restTemplate.getForObject("http://gorit-member/user", String.class);
return "订单调用会员返回结果:"+result;
}
这样就实现了基于 ribbon 的负载均衡,实现效果和上面一样,这里就不贴图了。
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
@Autowired
private LoadBalancerClient loadBalancerClient;
/**
* 根据 loadBalancerClient 实现负载均衡器
* @return
*/
@GetMapping("/load/order")
public Object loadBalancerClientMenber() {
ServiceInstance result = loadBalancerClient.choose("gorit-member");
return "订单调用会员返回结果:"+result;
}
返回结果:
订单调用会员返回结果:RibbonServer{serviceId=‘gorit-member’, server=10.9.9.117:8080, secure=false, metadata={preserved.register.source=SPRING_CLOUD}}
订单调用会员返回结果:RibbonServer{serviceId=‘gorit-member’, server=10.9.9.117:8082, secure=false, metadata={preserved.register.source=SPRING_CLOUD}}
案例:openfeign
SpringCloud 第一代采用 feign 第二代采用 openfeign
Openfeign 客户端作用:是一个 WEB 声明式的 Http 客户端远程调用,底层封装了 HttpClient技术。
Openfeign 是 springcloud 自己研发的。
gorit-openfeign-parent 整个依赖父类
微服务架构基本的样式:最大的特点能够服用
注意 feign 客户但调用的事项,如果请求参数没有加注解 @RequestParam,会采用 post 请求发送
Openfeign 默认是支持 负载均衡,ribbon
在微服务架构中服务的命名不能有下划线。
Rest、openfeign 都学习