springcloud中使用openfeign来优化接口调用

简单介绍在springcloud中使用openfeign来优化接口调用

目录

一、引入依赖

java 复制代码
        <!--添加openFeign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

二、为服务提供者编写openfeign接口

如需要调用的远程Controller接口如下(服务提供者接口)

java 复制代码
@RestController
@RequestMapping("/stock")
public class StockController {

    @Value("${server.port}")
    String port;

    @GetMapping("/reduce")
    public String reduce(){
        System.out.println("扣减库存:"+port);
        return "扣减库存:"+port;
    }
}

需要编写的openfeign接口如下(服务消费者openfeign接口)

java 复制代码
/**
 * name 指定调用rest接口所对应的服务名
 * path 指定调用rest接口所在的RequestMapping路径
 */
@FeignClient(name = "stock-service",path = "/stock")
public interface StockFeignService {
    // 声明需要调用rest接口对应的方法
    @GetMapping("/reduce")
    String reduce();
}

三、服务消费者调用定义的openfeign接口

随后在服务消费者Controller接口中调用定义的openfeign接口,达到像调用本地接口一样调用远程接口

java 复制代码
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private StockFeignService stockFeignService;

    @GetMapping("/addOrder")
    public String addOrder(){
        System.out.println("下单成功");
// String msg = restTemplate.getForObject("http://stock-service/stock/reduce", String.class);
        String msg = stockFeignService.reduce();
        return "hello feign !"+msg;
    }
}

四、项目结构

五、日志级别配置

在服务消费者端往往需要查看调用服务提供者接口的日志信息,包括接口地址,接口返回参数等等,因此需要对openfeign日志进行配置,以下提供三种配置方式

1、通过配置类进行全局配置

定义一个配置类

java 复制代码
@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

需要在yml配置文件中开启日志

yaml 复制代码
# springboot默认的日志级别为info,feign的debug日志级别就不会输入,所以需要修改feign目录下对应的日志级别为debug
logging:
  level:
    com.tuling.order.feign: debug

该方式会作用于所有的服务提供者,即调用所有的服务提供者都会打印相应级别的日志

2、通过配置类进行局部配置

将配置类FeignConfig中的@Configuration注解去掉

java 复制代码
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

随后修改对应的FeignService中@FeignClient注解,加上configuration = FeignConfig.class

java 复制代码
@FeignClient(name = "stock-service",path = "/stock",configuration = FeignConfig.class)
public interface StockFeignService {
    // 声明需要调用rest接口对应的方法
    @GetMapping("/reduce")
    String reduce();
}

最后注意同样需要在yml配置文件中开启日志

这样的方式可以通过编辑服务提供者对应的FeignService来自定义开启哪些服务提供者的日志

3、通过配置文件配置

yaml 复制代码
# springboot默认的日志级别为info,feign的debug日志级别就不会输入,所以需要修改feign目录下对应的日志级别为debug
logging:
  level:
    com.tuling.order.feign: debug

feign:
  client:
    config:
      stock-service:
        logger-level: BASIC

其中stock-service为服务提供者对应的服务名

相关推荐
瑶山几秒前
Spring Cloud微服务搭建一、Nacos配置和服务注册
spring·spring cloud·微服务·nacos
linyb极客之路8 小时前
告别 OpenFeign!Spring 6 原生 HttpExchange 微服务调用实战指南
spring boot·spring·spring cloud
用户2190326527359 小时前
配置中心 - 不用改代码就能改配置
后端·spring cloud·微服务
廋到被风吹走10 小时前
【Spring】Spring Cloud 配置中心动态刷新与 @RefreshScope 深度原理
java·spring·spring cloud
J_liaty11 小时前
Spring Cloud Gateway与LoadBalancer深度整合实战:从基础到进阶
spring·spring cloud·gateway·loadbalancer
刘一说11 小时前
微服务配置中心:从痛点到实践——Nacos深度应用指南
spring boot·spring cloud·微服务·云原生·架构
刘一说12 小时前
Spring Cloud微服务中的API网关:从Zuul到Spring Cloud Gateway的全面进化
spring·spring cloud·微服务
N***H48621 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
lhrimperial1 天前
企业智能知识库助手落地实践:从RAG到Multi-Agent
java·spring cloud·微服务·系统架构·知识图谱
廋到被风吹走1 天前
【Spring】 Spring Cloud 服务注册与发现深度解析:Eureka/Nacos/Consul 源码、AP vs CP 与自我保护机制
spring·spring cloud·java-consul