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为服务提供者对应的服务名

相关推荐
小七mod1 小时前
【Nacos】Nacos1.4.x服务注册源码分析
java·spring cloud·微服务·nacos·源码·集群·注册中心
sanggou1 小时前
Spring Cloud负载均衡组件到底是哪一个?
spring·spring cloud·负载均衡
重庆小透明5 小时前
微服务,不仅仅是“小服务”
java·后端·spring cloud·微服务·云原生·架构
liurunlin8886 小时前
Spring Cloud Data Flow 简介
后端·spring·spring cloud
ab1515177 小时前
3.11二刷基础78、79,完成进阶
spring cloud
Mr.朱鹏16 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
杜子不疼.17 小时前
Spring Cloud+AI :实现分布式智能推荐系统
java·人工智能·spring cloud
一知半解仙17 小时前
从“玩具项目“到“生产级架构“:Spring Boot + Spring Cloud + AI 微服务实战避坑指南
spring boot·spring cloud·架构
HDXxiazai17 小时前
idea JDK17 spring boot+nacos搭建 图文教程
java·spring boot·spring cloud·intellij-idea