SpringCloud(3)--服务调用(Ribbon、OpenFeign)

本文详细介绍了SpringCloud中服务调用的组件Ribbon和OpenFeign的使用。Ribbon作为本地负载均衡器,通过IRule接口提供了多种负载均衡策略。OpenFeign则是一个声明式的Web服务客户端,简化了服务调用的过程。文中还涵盖了Ribbon的自定义负载均衡算法,OpenFeign的超时设置和日志配置。
摘要由CSDN通过智能技术生成

系列链接:


服务调用

Ribbon

Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端,主要功能是提供客户端的软件负载均衡算法和服务调用。

注:Ribbon虽然大规模运用,但目前也进入维护,基本上不准备更新了

负载均衡:将用户的请求平摊的分配到多个服务上,常见的负载均衡软件有Nginx等。

Ribbon本地负载均衡客户端与Nginx服务端负载均衡的区别:

  • Nginx是服务器负载均衡,客户端所有请求交给 Nginx,然后由 Nginx 实现转发请求。

  • Ribbon是本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到 JVM 本地,从而在本地实现 RPC 远程服务调用技术。

由上面的区别可以将负载均衡分为两种:

  • 集中式LB:在服务的消费方和提供方之间使用独立的LB设施(Nginx)
  • 进程内LB:将LB的逻辑继承到消费方,消费方从服务注册中心获知哪些提供方地址可用,然后自己进行选择(Ribbon)

Ribbon就是一个软负载均衡的客户端组件,就是负载均衡+RestTemplate调用,与Eureka结合的架构如下:
在这里插入图片描述


Ribbon的使用

  1. 我们之前实现了负载均衡就是基于 Ribbon,其实在使用eureka的新版本时,默认就集成了Ribbon。

    		<!--eureka client-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
  2. RestTemplate类

    • xxxForObject()方法:返回的是响应体中的数据
    • xxxForEntity()方法:返回的是entity对象,包含响应体数据、响应体信息(状态码等)

Ribbon常用负载均衡算法

Riboon使用 IRule 接口,根据特定算法从所有服务中,选择一个服务。而I Rule 接口有7个实现类。每个实现类代表一个负载均衡算法:

  • com.netflix.loadbalancer.RoundRobinRule:轮询
  • com.netflix.loadbalancer.RandomRule:随机
  • com.netflix.loadbalancer.RetryRule:先轮询,失败则在指定时间内进行重试
  • WeightedResponseTimeRule:对轮询的扩展,响应速度越快权重越大
  • BestAvailableRule:先过滤处于断路状态的服务,选择一个并发量最小的服务
  • AvailabilityFilteringRule:先过滤故障实例,再选择并发较小的实例
  • ZoneAvoidanceRule默认规则,根据Server所在区域的性能和可用性选择服务器。

修改Order模块

有两点需要注意:

  • 这里使用 Eureka 的相关服务

  • IRule 自定义配置类不能放在@ComponentScan所扫描的当前包以及子包下

    (有@SpringBootApplication注解的Main所在的包)

  1. 额外创建一个包
    image-20200711151134933

  2. 创建配置类,指定负载均衡算法

            @Configuration
            public class MySelfRule {
         
                @Bean
                public IRule myRule(){
         
                    return new RandomRule();//随机负载均衡算法
                }
            }
    
  3. 在主启动类上加@RibbonClient注解,表示访问CLOUD-PAYMENT-SERVICE服务时,使用我们自定义的负载均衡算法

        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值