天天看点

Springcloud的服务调用---OpenFeign

目录:
1.OpenFeign
	1.1创建feign模块
	1.2超时控制
	1.3日志打印
           

一,简单介绍一下服务调用

服务调用,指的是注册到服务端上的客户端之间数据的相互调用问题。

 spring-cloud调用服务有两种方式,一种是	Ribbon+RestTemplate, 另外一种是Feign。
 
服务降级,指的是当服务器压力剧增时,根据当前业务情况及流量对一些服务和页面有策略的降级,
以此释放服务器资源以保证核心任务的正常运行。
           

二,OpenFeign

1.创建feign模块

首先,新建一个消费者募模块.feign自带负载均衡配置,所以不用手动配置.

然后,创建cloud-consumer-feign-order80

Springcloud的服务调用---OpenFeign
1.1.引入依赖
           
<dependencies>
    <!-- Open Feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- eureka Client -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <groupId>com.krisswen.cloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
           
1.2编写配置文件
           
server:
  port: 80
spring:
  application:
    name: cloud-consumer-feign-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
           
1.3编写启动类
           
@SpringBootApplication
@EnableFeignClients //开启使用feign客户端的功能
public class CustomerFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(CustomerFeignMain80.class,args);
    }
}
           
1.4编写grign客户端
           
@FeignClient(value = "cloud-payment-service") //标识当前接口就是一个feign客户端,并且指定调用哪一个微服务
public interface PaymentFeignService {
    @GetMapping("payment/{id}")
    public CommonResult<Payment> findPaymentById(@PathVariable("id") Long id);
}
           
1.5编写controller层
           
@RestController
public class CustomerFeignController {

    @Autowired
    PaymentFeignService paymentFeignService;

    @GetMapping("consumer/feign/payment/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
        return paymentFeignService.getPaymentById(id);
    }
}
//localhost/consumer/feign/payment/1
           
1.6.测试结果
分别启动 两台eureka 7001  7002
两台服务提供方 8001 8002
启动feign客户端  cloud-consumer-feign-order80
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210120082738315.JPG#pic_center)
           

1.7.最终的目录为下图所示:

Springcloud的服务调用---OpenFeign

2.超时控制

2.1在提供方添加模拟服务超时的方法用来测试

设置需要响应的时间

@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut(){
    try {
        TimeUnit.SECONDS.sleep(3);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "time out.....";
}
           

2.2在feign客户端中定义超时方法

@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut();
           

2.3.在controller中定义

@GetMapping("consumer/feign/timeout")
public String timeout(){
    //openfeign调用服务,默认等待时间是1秒钟
    return paymentFeignService.paymentFeignTimeOut();
}
           

2.4.进行测试,通过Feign客户端进行访问

2.4.1.首先我们直接访问服务中的paymentFeignTimeOut方法
2.4.2.然后我们直接访问feign客户端类访问
           

2.5.设置避免超时调用

feign:
  client:
    config:
      default:
        readTimeout: 5000
        connectTimeout: 5000
ribbon: #设置Feign客户端调用超时时间
  ReadTimeOut: 5000 #指的是建立连接所需要的的时间
  ConnectTimeOut: 5000 #指的是建立连接之后,服务器读取资源需要的时间
           

3.日志打印

 Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http的请求细节,就是对Feign接口的调用情况进行监控和输出。

3.1.自定义配置类

@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}
           

3.2定义配置文件的日志配置内容

logging:
  level:
    com.kriss.service.PaymentFeignService: debug
           

3.3测试结果,查看我们的打印信息

继续阅读