springCloud(三)Ribbon&Feign

Ribbon

Ribbon是客户端负载均衡工具

客户端负载均衡与服务端负载均衡
1.客户端负载均衡:
    客户端获取到服务端的提供者列表,然后根据一定的规则去调用。(随机/轮询)

服务提供者启动时向Eureka集群注册服务,在消费者第一次进行消费时,会从Eureka获取可用的服务列表并缓存到本地(所以第一次耗时多),并且会定时更新服务列表,然后通过负载均衡的算法向其中一个服务提供者请求(默认轮询机制)。

2.服务端负载均衡
    服务端将所有的请求地址放在ng中,消费端请求ng的地址,由ng进行请求的分发。

搭建Ribbon工程

1.引入依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2.定义自定义的config类

1.类上加@configuration

3.在config类中定义restTemplate并加上@LoadBalanced

@LoadBalanced
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}

@LoadBalanced是指创建一个负载均衡的RestTemplate的Bean

4.调用服务方(通过微服务名称 )

String result =  restTemplate.getForEntity("http://HELLO-SERVICE/hello"
                ,String.class,"").getBody();

5.负载均衡算法机制

在configuration类中 可以配置算法

    @Bean
    public IRule myRule(){
        return new RetryRule();
    }
算法列表:
    - RandomRule 随机
    - RetryRule 重试
    - RoundRobinRule 轮询(默认)
    - AvailabilityFilteringRule 过滤掉处于熔断或者高并发的server。
使用Java配置类为某个服务指定负载均衡算法
  • 在独立包(与application启动类同级的包)中写RibbonConfiguration类

    //该类不能在主应用程序上下文的@CompentScan中
    @Configuration
    public class RibbonConfiguration{
        @Bean
        public IRule myRule(){
            // 随机策略
            return new RandomRule();
        }
    }
    
    
  • 在application同级包中写ProviderConfiguration类通过@RannonClient指定策略

    @Configuration
    @RibbonClient(name="microservice-provider-user",configuration = RibbonConfiguration.class)
    public class ProviderUserConfiguration{
        
    }
    
    

策略配置类如果放在application启动类同级上,那么就会是统配生效

通过配置文件配置策略

在application.yml中进行配置

microservice-provider-user:
    ribbon:
        NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule

Ribbon组件
1.ServerList 负载均衡使用的服务器列表,这个列表会缓存在负载均衡器中,并定期更新。(当 Ribbon 与 Eureka 结合使用时,ServerList 的实现类就是 DiscoveryEnabledNIWSServerList,它会保存 Eureka Server 中注册的服务实例表。)
2.ServerListFilter 服务器列表过滤器。这是一个接口,主要用于消费者过滤服务器列表,过滤后的结果就是ServerList。
3.IPing 探测服务器是否存活的策略。
4.IRule 负载均衡策略。
5.ILoadBablancer 负载均衡器。这也是一个接口,Ribbon 为其提供了多个实现,比如 ZoneAwareLoadBalancer。而上层代码通过调用其 API 进行服务调用的负载均衡选择。一般 ILoadBalancer 的实现类中会引用一个 IRule。
6.RestClient 服务调用器。

IRule使用的是抽象模式+模版模式

模版模式:定义算法中的骨架在抽象类中,在子类中进行实现。

工作步骤
1.优先选择在同一个zone切负载较少的EurekaServer。
2.定期从Eureka更新并过滤服务器列表。
3.根据用指定的侧裂,在Server列表中选择一个实例地址。
4.通过RestClient进行服务调用。

Feign

Feign是声明式、模版化的HTTP客户端,可以帮助我们更便捷、更优雅的使用HttpApi。

在springCloud中使用Feign只需要创建接口,然后在接口上添加注解即可。

Ribbon 如果遇到参数很多时,维护困难,需要用feign。

Feign继承
  • Feign支持继承,使用继承可以将一些公共操作分组到一些父接口中,从而简化Feign的开发。
  • 抽取服务的公共接口到新的项目中,增加父接口。
  • 在实现服务中引入父接口服务工程的依赖。
  • 在实现服务中增加父服务接口的子接口并在子接口上加注解@FeignClient
使用Feign
  • 引入依赖
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-openfeign</artifactId>
    	</dependency>
    
  • 创建接口,并在接口上增加@FeignClient(name="")
  • 启动类上增加注解@EnableFeignCient
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值