Open Feign使用方法、等待時間、日誌列印功能

吃茄子的貓發表於2020-10-02

openFeign是一個宣告式的web服務客戶端,讓編寫web服務客戶端變得非常容易,只需要建立一個介面並在介面上新增註解即可。
openFeign整合了Ribbon
使用openFeign步驟
**一、**建module。引入pom.xml中openFeign的依賴

        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

**二、**yml常規配置即可

server:
  port: 80

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

**三、**主啟動加入@EnableFeignClients //使用feign啟用並開啟

@SpringBootApplication
@EnableFeignClients  //使用feign啟用並開啟
public class OrderFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain80.class,args);
    }
}

**四、**建介面用來呼叫payment介面上加入@FeignClient註解

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id);
    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout();
}

其中@FeignClient(value = “CLOUD-PAYMENT-SERVICE”)
value是payment的spring:
application:
name:名稱
eureka中的Application
在這裡插入圖片描述
五、控制層

@RestController
@Slf4j
public class OrderFeignController {
    @Resource
    private PaymentFeignService paymentFeignService;
    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
        return  paymentFeignService.getPaymentById(id);
    }

    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout(){
        //openfeign---ribbon,客戶端一般預設等待一秒鐘
        return paymentFeignService.paymentFeignTimeout();
    }
}

payment中

 @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return serverPort;
    }

啟動即可呼叫/payment/feign/timeout 不出意外會報錯因為openFeign預設等待1秒鐘超過後報錯,
解決辦法:yml檔案中加入

#設定feign客戶端超時時間(openFeign預設支援ribbon)
ribbon:
  #指的是建立連線所用的時間,適用於網路狀況是正常的情況,兩端連線所用的時間
 ReadTimeout: 5000
   #指的是建立連線之後從伺服器讀取到可用資源所用的時間
 ConnectTimeout: 5000

來更改openFeign預設等待時間

openFeign日誌列印功能

feign提供了日誌列印功能,可以通過配置來調整日誌級別,從而瞭解Feign中HTTP請求的細節
日誌級別有一下四個:
none:預設的,不顯示任何日誌
basic:僅記錄請求方法,URL響應狀態碼,及執行時間
headers:除了basic中定義的資訊之外還有請求和響應頭資訊
full:除了headers中定義的資訊之外,還有請求和響應的正文及後設資料
具體配置如下:
一、 新建配置類FeignConfig

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

二、yml檔案

logging:
  level:
     #feogn日誌以什麼級別監視那個介面
     com.zhutianlu.springcloud.service.PaymentFeignService: debug

其中com.zhutianlu.springcloud.service.PaymentFeignService為監控介面的全路徑

相關文章