核心知识点
1.@LoadBalanced
当RestTemplante进行远程服务调用时,假如需要负载均衡,我们可以使用@LoadBalanced注解,该注解作用是在RestTemplante对象进行远程服务调用时,底层自动使用拦截器,根据服务名调用服务实例,从一个服务实例中拿到ip和端口,把接收到的url进行重构,拦截器底层用的就是LoadBalancrClient机制,然后根据重构后的url进行服务的调用
注意:此方式虽然代码简单了,因为多了一个拦截器对象,性能会降低一点
@LoadBalanced使用方式
第一步:在主启动类创建具有能被拦截的RestTemplate组件
第二步:在使用RestTemplate的泪中注入该对象,然后基于RestTemplate进行服务的调用
第三步:测试
RestTemplate对象进行服务调用时,被LoadBalancerInterceptor拦截,他的作用就是用于RestTemplate的负载均衡, LoadBalancerInterceptor将负载均衡的核心交给LoadBalancer,核心代码如下:
注意:@LoadBalancer注解是属于spring的,而不是Ribbon的,在spring容器启动时,如果检测到Bean组件被@LoadBalanced注解修饰,speing就会为其生成 LoadBalancerInterceptor拦截器
基于Feign进行远程服务调用
出生背景
服务消费方基于RestTemplate方式进行服务调用,一种直接的方式就是自己拼接url,拼接参数后进行服务调用,这种方式太过复杂
概念
feign是一种声明式web客户端,底层封装了对RestTemplate技术的应用,通过Feign简化服务消费方对服务提供方远程服务的调用
Feign应用
第一步:在服务消费方添加Feign依赖
第二步:在主启动类添加@EenableFeignClients
第三步:定义http请求API,基于此API借助OpenFeign进行远端服务
其中,@FeignClient描述的接口,底层会自动为其创建实现类
第四步:创建FeignConsumerController并添加Feign功能访问
第五步:测试
注意:使用Feign进行远端服务调用,底层会自动基于Robbin实现负载均衡
Feign配置进阶
通常一个服务提供方会提供很多资源服务,服务消费方基于同一个服务提供方写了很多服务调用的接口,如果我们没有在接口中指定contexId,服务就会启动失败,例如,再添加一个接口
出现以下错误
@FeignClient注解修饰的接口默认生成对象的名字为该注解value或name属性的值,我们需要在远程服务接口中指定该注解的名字,作为远程服务调用的唯一标识符,使用contexId属性
当我们进行远程服务调用时,连接超时或者服务不可用时,一般需要在服务消费端给出具体的容错方案,例如: 在Feign应用中,通过实现FallbackFactory接口的实现类进行默认的相关处理
第一步:创建FallbackFactory接口的实现类,进行默认处理
第二步:在Feign访问的接口中,使用fallbackFactroy属性,应用FallbackFactroy对象
第三步:在application.yml配置文件中,启动熔断机制,当访问出错时,就停止访问
负载均衡策略配置
1.在主启动类加载IRulebean组件,返回指定的负载均衡策略类对象
IRule实现类
2.在application.yml配置文件中,配置负载均衡策略
com.netflix.loadbalancer.RandomRule为IRule实现类的绝对路径