Ribbon是Netflix发布的负载均衡器。Eureka一般配合Ribbon进行使用,Ribbon利用从Eureka中读取到服务信息,在调用服务提供者提供的服务时,会根据一定的算 法进行负载。 
Ribbon高级应用
不需要引入额外的Jar坐标,因为在服务消费者中我们引用过的eureka-client,它会引用Ribbon相关Jar
1、引入轮询的注解
// 使用RestTemplate模板对象进行远程调用@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}然后所有对外提供的接口服务都使用注入进来,然后进行远程调用@Autowiredprivate RestTemplate restTemplate;
2、服务提供者
其服务的路径是/resume/openstate/{userId}
@RestController@RequestMapping("/resume")public class ResumeController {@Autowiredprivate ResumeService resumeService;@Value("${server.port}")private Integer port;//"/resume/openstate/1545132"@GetMapping("/openstate/{userId}")public Integer findDefaultResumeState(@PathVariable Long userId) throws Exception {//return resumeService.findDefaultResumeByUserId(userId).getIsOpenResume();System.out.println("====>>>>>>>>>>>>>>我是8081,访问到我这里了......");return port;}}
3、消费端
也是根据这个路径去请求的,先将restTemplate注入
@Autowiredprivate RestTemplate restTemplate;@Testpublic void testRibbon() {// 客户端面对的其实是服务了----lagou-service-resume,具体访问到哪个实例是由ribbon决定的String url = "http://lagou-service-resume/resume/openstate/1545132";// 调用远程服务—> 简历微服务接口 RestTemplate -> JdbcTempate// httpclient封装好多内容进行远程调用Integer forObject = restTemplate.getForObject(url, Integer.class);System.out.println("=====》》》使用ribbon负载均衡访问,访问的服务实例的端口号:" + forObject);}
Ribbon负载均衡策略
在yml的配置文件中,修改负载均衡策略
#针对的被调用方的微服务名称,不加就是全局失效lagou-service-resume: #如果是全局生效就把这个具体的服务名取消即可,其他往前移动ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载策略调整
Ribbon的工作原理 
思考:Ribbon在做什么: 当我们访问http://lagou-service-resume/resume/openstate/的时候,ribbon应该 根据服务名lagou-service-resume获取到该服务的实例列表并按照⼀定的负载均衡 策略从实例列表中获取一个实例Server,并最终通过RestTemplate进行请求访问
Ribbon细节结构图
(涉及到底层的一些组件/类的描述) 1)获取服务实例列表 2)从列表中选择一个server 
图中核心是负载均衡管理器LoadBalancer(总的协调者,相当于大脑,为了做事 情,协调四肢),围绕它周围的多有IRule、IPing等
IRule:是在选择实例的时候的负载均衡策略对象
IPing:是用来向服务发起心跳检测的,通过心跳检测来判断该服务是否可用
ServerListFilter:根据一些规则过滤传入的服务实例列表
ServerListUpdater:定义了一系列的对服务列表的更新操作
