SpringCloud【负载均衡策略、OpenFeign概述、入门案列、日志增强 、超时机制 】(三)

目录

客户端负载均衡_负载均衡策略

服务接口调用_OpenFeign概述

服务接口调用OpenFeign_入门案列

服务接口调用OpenFeign_日志增强 

服务接口调用OpenFeign_超时机制 


客户端负载均衡_负载均衡策略

以前的Ribbon有多种负载均衡策略 

RandomRule - 随性而为

 解释:随机

RoundRobinRule - 按部就班

解释: 轮询 

 RetryRule - 卷土重来

解释: 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试。 

WeightedResponseTimeRule - 能者多劳 

这个Rule继承自RoundRibbonRule,他会根据服务节点的响应时间计算权重,响应时间越长权重就越低,响应越快则权重越高,权重的高低决定了机器被选中概率的高低。也就是说,响应时间越小的机器,被选中的概率越大。

解释: 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择 

BestAvailableRule - 让最闲的人来 

解释: 应该说这个Rule有点智能的味道了,在过滤掉故障服务以后, 它会基于过去30分钟的统计结果选取当前并发量最小的服务节点,也就是最“闲”的节点作为目标地址。如果统计结果尚未生成,则采用轮询的方式选定节点。 

AvailabilityFilteringRule - 我是有底线的 

这个规则底层依赖RandomRobinRule来选取节点,但并非来者不拒,它也是有一些底线的,必须要满足它的最低要求的节点才会被选中。如果节点满足了要求,无论其响应时间或者当前并发量是什么,都会被选中。

解释: 每次AvailabilityFilteringRule(简称AFR)都会请求RobinRule 挑选一个节点,然后对这个节点做以下两步检查:是否处于不可用,节点当前的active请求连接数超过阈值,超过了则表示节点目前太忙,不适合接客如果被选中的server不幸挂掉了检 查,那么AFR会自动重试(次数最多10次),让RobinRule重新选择一个服务节点。 

 ZoneAvoidanceRule - 我的地盘我做主

解释: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器 

 但LoadBalancer只提供了两种负载均衡器

1、RandomLoadBalancer 随机

2、RoundRobinLoadBalancer 轮询

 注意: 不指定的时候默认用的是轮询

实时效果反馈

1.下列是轮询负载均衡策略的是____。 

A RandomLoadBalancer

B RoundRobinLoadBalancer

C ZoneAvoidanceRule

D AvailabilityFilteringRule

2.下列是随机负载均衡策略的是_____。

A RandomLoadBalancer

B RoundRobinLoadBalancer

C ZoneAvoidanceRule

D AvailabilityFilteringRule

服务接口调用_OpenFeign概述

OpenFeign是什么 

Spring Cloud OpenFeign用于Spring Boot应用程序的声明式REST 客户端。

OpenFeign能干嘛 

Feign旨在使编写Java Http客户端变得更容易。前面在使用 RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。

OpenFeign和Feign两者区别 

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和 HttpMessageConverters。

注意: 接口+注解。 

实时效果反馈

1.Spring Cloud OpenFeign主要作用是____。

A 负载均衡

B 解决单点故障

C 服务调用

D 注册中心

2. Spring Cloud OpenFeign支持了_____标准注解。

A Spring MVC

B Spring Data

C Spring Batch

D 以上都错误 

服务接口调用OpenFeign_入门案列

构建cloud-consumer-feign-order80工程

修改POM文件 

<!-- 引入OpenFeign依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

编写YML文件

eureka:
 client:
    # 表示是否将自己注册到Eureka Server
   register-with-eureka: true
    # 示是否从Eureka Server获取注册的服务信息
   fetch-registry: true
    # Eureka Server地址
   service-url:
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
 instance:
   instance-id: cloud-openfeign-order-consumer
   prefer-ip-address: true
spring:
 application:
    # 设置应用名词
   name: cloud-openfeign-order-consumer
server:
 port: 80

编写主启动类

/**
* 主启动类
*/
@Slf4j
@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
    public static void main(String[] args) {
      SpringApplication.run(OrderFeignMain80.class,args);
        log.info("**************OrderFeignMain80 服务启动成功 **********");
   }
}

编写业务逻辑接口PaymentFeignService

/**
 * 支付远程调用Feign接口
 */
@Component
@FeignClient(value = "cloud-payment-provider")
public interface PaymentFeignService {
   @GetMapping("/payment/index")
   String index();
}

编写控制层Controller

/**
* 订单控制层
*/
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private PaymentFeignService paymentFeignService;
    /**
     * 测试OpenFeign接口调用
     * @return
     */
    @GetMapping("/index")
    public String get(){
        return paymentFeignService.index();
   }
}

测试

1 先启动2个Eureka集群7001/7002

2 在启动服务提供者payment8001

3 在启动服务消费者cloud-consumer-feign-order

4 浏览器访问http://localhost/order/index

服务接口调用OpenFeign_日志增强 

OpenFeign虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别。 

OpenFeign的日志级别如下:

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

 配置类中配置日志级别

@Configuration
public class OpenFeignConfig{
    
    /**
    * 日志级别定义
    */
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
   }
}

注意: 这里的logger是feign包里的。

yaml文件中设置接口日志级别 

logging:
   level:
     com.itbaizhan.service: debug

注意: 这里的 com.tong.service 是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口。

 测试

请求http://localhost/order/index

服务接口调用OpenFeign_超时机制 

超时机制 

问题:

1、服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一 直等待下去。

2、在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩。

3、利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问, 则自动断开连接。 

配置超时时间 

# 默认超时时间feign: client:   config:     
default:       # 连接超时时间       
connectTimeout: 2000       # 读取超时时间    
  readTimeout: 2000
 /**     * 测试超时机制     * @return     */

   @GetMapping("timeout")    
   public String   paymentFeignTimeOut()
    {
        try {          
                TimeUnit.SECONDS.sleep(5);
         } catch(InterruptedException e)
         {          
             e.printStackTrace();
         } 
         return  "payment success";
   }

服务消费方80添加超时方法PaymentFeignService

@FeignClient("CLOUD-PAYMENT-PROVIDER")
public interface PaymentFeignService 
{  
     @GetMapping("/payment/index")    
        String  index();    
     @GetMapping("/payment/timeout")  
        String timeout();
}

服务消费方80添加超时方法OrderController

  /**     * 测试超时机制     * @return     */
   @GetMapping("timeout")    
   public String  timeout()
    {
        return  paymentFeignService.timeout();
    }

实时效果反馈

1. OpenFeign技术中给服务设置超时时间解决___问题。

A 安全性

B 速度

C 响应慢

D 服务雪崩

2. OpenFeign技术中如何设置服务的读取超时时间_____。

A feign.client.config.default.readTimeout

B feign.client.config.connectTimeout

C feign.client.config.default.read

D feign.client.config.default.Timeout

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131872035
今日推荐