一、什么是Ribbon?
Ribbon是Netflix公司开源的一个负载均衡的项目,负载均衡分为两种,一种是服务端的负载均衡,比如nginx,还有一种是客户端负载均衡,而ribbon就是一个基于客户端负载均衡器,运行在客户端,一般在微服务中结合注册中心和Feign使用,今天我们来了解一下Ribbon底层源码是如何实现负载均衡的,这里我们使用SpringBoot项目来学习ribbon的源码分析
二、源码入口
这里我们使用Spring提供的RestTemplate工具类来发起微服务调用,使用过ribbon的程序员都知道,如果直接使用RestTemplate发起服务调用是不会有负载均衡的效果,我们需要加上@LoadBalanced注解,如下图
这样的话我们微服务调用,就会有负载均衡的效果,那么这里面底层是如何实现的呢,其实ribbon的底层还是基于Springboot的自动装配的功能,至于自动装配这里就不在赘述了,
springboot启动的时候会加载在org.springframework.cloud.netflix.ribbon这个jar包里面spring.factories里面RibbonAutoConfiguration类我们来看看这个类里面做了什么
/*
- Copyright 2013-2020 the original author or authors.
- Licensed under the Apache License, Version 2.0 (the “License”);
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
https://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an “AS IS” BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
*/
package org.springframework.cloud.netflix.ribbon;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.List;
import com.netflix.client.IClient;
import com.netflix.client.http.HttpRequest;
import com.netflix.ribbon.Ribbon;
import org.springframe