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权限
代码语言:javascript复制微服务项目目录结构:
parent: 存放共同的依赖信息
api-service: 所有服务的接口
ticket-service: 特定服务的接口
ticket-serviceImpl: 特定服务的实现
实体类和定义接口信息存放在接口包里
在特定服务中的参数前面要标注@RequestParam("xx"),这样参数才会被接收
Feign客户端超时时间设置
代码语言:javascript复制设置Feign客户端超时时间
ribbon.connectTime=5000 # 建立连接所用时间,两端连接所用时间
ribbon.ReadTimeout=5000 # 建立连接后,从服务器读取可用资源所用时间