第一步引入依赖

  <!--openFeign-->
  <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>

第二步 在启动类上加注解

@SpringBootTest
@EnableFeignClients
class ItemServiceApplicationTests {

    @Test
    void contextLoads() {
    }

}

第三步 在发送模块中编写 OpenFign 的调用模块

@FeignClient("item-common")//拉取的服务
public interface FeginTestOne {


    @GetMapping("/fegin1/{msg}")//拉取的服务的路径
    public String hello(@PathVariable(value = "msg",required = false) String  msg); //通过这个方法发送请求



}

需要注意的是这个模块要与接收模块相对应 如下:

@RestController
public class FeginController {

    @GetMapping("/fegin1/{msg}")
    public  String fegin1response(@PathVariable(value = "msg",required = false) String  msg){
        return "fegin1: " + msg;
    }


}

第四步 使用openfgine

 @Resource
private FeginTestOne feginTestOne;
@GetMapping("/login2")
    public String login2(){

     String s1 =   feginTestOne.hello("success");

      return  s1;

    }

定义公共模块openFigne 的包扫描问题

方式1:声明扫描包

方式2:声明要用的FeignClient

日志配置

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

  • NONE:不记录任何日志信息,这是默认值。

  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间

  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息

  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

定义日志级别

在hm-api模块下新建一个配置类,定义Feign的日志级别 注意可以不用加@configuration

package com.hmall.api.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;

public class DefaultFeignConfig {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.FULL;
    }
}

配置

接下来,要让日志级别生效,还需要配置这个类。有两种方式:

  • 局部生效:在某个FeignClient中配置,在发送模块的openfgine的接口中 只对当前FeignClient生效

@FeignClient(value = "item-service", configuration = DefaultFeignConfig.class)
  • 全局生效:在@EnableFeignClients中配置,{在启动类上面 } 针对所有FeignClient生效。

@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)