2.1 OpenFeign之服务远程调用

1.OpenFeign简介

OpenFeign是一个声明式的rest客户端,作用是基于SpringMVC的常见注解,实现更便捷的http请求发送

2.OpenFeign使用步骤

(1)导入依赖坐标

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--用于系统内部服务之间的调用需加负载均衡依赖-->
        <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

(2)启用OpenFeign功能

在启动类上加@EnableFeignClients注解,启用OpenFeign功能

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;


@SpringBootApplication
@EnableFeignClients // 启用OpenFeign功能
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

(3)编写FeignClient接口

若要调用第三方接口,将第三方接口的url赋值给@FeignClient的url属性即可

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient("order-service") // 配置要调用的服务名称,与spring.application.name的值保持一致
public interface OrderClient {
    @GetMapping("/demos")
    String getOrder();
}

(4)使用FeignClient接口,实现远程调用

import com.example.client.OrderClient;
import com.example.domain.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("demos")
public class DemoController {
    @Autowired
    private OrderClient orderClient;

    @GetMapping
    public Order getOrder() {
        System.out.println("发生了远程调用");
        return orderClient.getOrder();
    }
}

3.OpenFeign日志

(1)日志等级说明

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志

等级描述
NONE不记录任何日志信息(默认值)
BASIC仅记录请求的方法,URL及响应状态码和执行时间
HEADERS在BASIC的基础上,额外记录了请求和响应的头信息
FULL记录所有请求和响应的明细,包括头信息、请求体、元数据

(2)修改OpenFeign日志等级

注册Feign日志组件

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

配置指定FeignClient日志等级

@FeignClient(value = "服务名称", configuration = OpenFeignConfig.class)

配置全局FeignClient日志等级

@EnableFeignClients(defaultConfiguration = OpenFeignConfig.class)

4.OpenFeign超时控制

OpenFeign中超时控制分为两种:连接超时(connectTimeout)和读取超时(readTimeout)

spring:
  cloud:
    openfeign:
      client:
        config:
          # 全局FeignClient配置
          default:
            # 读取超时时间
            read-timeout: 10000
            # 连接超时时间
            connect-timeout: 3000
            # 日志等级
            logger-level: full
          # 指定FeignClient全局配置
          @FeignClient注解的contextId/value属性值:
            read-timeout: 10000
            connect-timeout: 3000
            logger-level: full

5.OpenFeign重试机制

远程调用失败后,还可以进行多次尝试,如果某次成功返回ok,如果多次依然失败则结束调用,返回错误

import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenFeignConfig {
    @Bean
    public Retryer feignRetryer() {
        return new Retryer.Default();
    }
}

6.修改OpenFeign底层连接池

(1)导入依赖坐标

        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
        </dependency>

(2)在配置文件中开启连接池

spring:
  cloud:
    openfeign:
      httpclient:
        enabled: false
      okhttp:
        enabled: true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码届艺术家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值