Ribbon负载平衡
Ribbon与Nginx的区别
客户端负载平衡Ribbbon:
- Ribbon是从Eureka注册核心服务器上获取注册信息列表,缓存到本地, 而后在本地实现轮询负载平衡策略.即在客户端实现负载平衡.
服务端负载平衡Nginx:
- Ngnix是客户端所有申请对立交给Nginx,由Nginx实现负载平衡申请转发,属于服务器端负载平衡.即申请由Nginx服务器端进行转发.
利用场景的区别:
- Nginx实用服务器端实现负载平衡:Tomcat,Jetty
Ribbon实用于在微服务中RPC近程调用实现本地负载平衡:Dubbo,SpringCloud
Ribbon负载平衡的底层实现
Ribbon负载平衡:
- 客户端从Eureka注册核心获取对应的注册信息列表,获取到注册信息列表后,缓存到本地,而后在本地实现负载平衡.即负载平衡是由客户端实现的.
负载平衡算法:
- 接口的总申请数取模服务器数失去理论的服务器下标(从0开始)获取到服务器调用服务
实现:
获取对应服务器的近程调用地址:DiscoveryClient
List<ServiceInstance> instances=discoveryClient.getInstance("eureka_ticket");
应用rest形式发送申请应用近程调用
String result=restTemplate.getForObject(instanceUrl,String.class);
Feign
SpringCloud中反对两种客户端调用工具:
- Rest(RestTemplate模板)
- Feign
Feign是申明式Http客户端调用工具,采纳接口+注解形式实现,易读性强.
Feign客户端书写是以SpringMVC接口模式书写的@FeignClient(name="服务别名")@FeignClient调用服务接口(name:服务名称)在主类上标注@EnableFeignClients注解开启Feign权限
微服务项目目录构造:parent: 寄存独特的依赖信息api-service: 所有服务的接口ticket-service: 特定服务的接口ticket-serviceImpl: 特定服务的实现实体类和定义接口信息寄存在接口包里在特定服务中的参数后面要标注@RequestParam("xx"),这样参数才会被接管
Feign客户端超时工夫设置
设置Feign客户端超时工夫ribbon.connectTime=5000 # 建设连贯所用工夫,两端连贯所用工夫ribbon.ReadTimeout=5000 # 建设连贯后,从服务器读取可用资源所用工夫