0
点赞
收藏
分享

微信扫一扫

3.服务器负载均衡的实现

飞空之羽 2022-02-25 阅读 54

核心知识点

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实现类的绝对路径

举报

相关推荐

0 条评论