首頁 > 軟體

SpringCloud服務介面呼叫OpenFeign及使用詳解

2023-04-02 06:02:15

OpenFeign簡介

Feign是一個宣告式的Web服務使用者端,讓編寫Web服務使用者端變得非常容易,只需建立一個介面並在介面上新增註解即可。

在學習Ribbon時,服務間呼叫使用的是RestTemplate+Ribbon實現,而Feign在此基礎上繼續進行了封裝,使服務間呼叫變得更加方便。

而OpenFeign可以理解為Feign的升級版。

OpenFeign使用

OpenFeign應用在消費端,伺服器端不需要做任何改變

建立一個新的消費端cloud-consumer-feign-order80,首先引入相關依賴,引入OpenFeign以後,可以看到OpenFeign內建了Ribbon,所以他底層實現負載均衡還是依賴於Ribbon


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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <dependency>
        <groupId>com.yellowstar.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

編寫組態檔

server.port=80

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

在啟動類上新增如下註解

@EnableFeignClients

對於OpenFeign來說,服務間的呼叫需要在消費端建立一個介面,這個介面類似於伺服器端

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
    @GetMapping("/payment/get/{id}")
    CommonResult<Payment> getPayment(@PathVariable("id") int id);
}

OpenFeign超時控制

預設情況下,OpenFeign呼叫方法,會給該方法一秒鐘的執行時間,如果一秒鐘之後沒有執行完方法,則直接報錯。而OpenFeign底層呼叫的Ribbon,也就是說我們需要設定Ribbon服務間呼叫的等待時間

#指的是建立連線所用的時間,適用於網路狀況正常的情況下,兩端連線所用的時間
ribbon.ReadTimeout=5000l
#指的是建立連線後從伺服器讀取到可用資源所用的時間
ribbon.ConnectTimeout=5000

如果不設定,會報一下錯誤

OpenFeign紀錄檔

OpenFeign在呼叫http請求時,可以將請求的紀錄檔完整的列印出來,有以下幾種紀錄檔級別,預設是無紀錄檔。

  • NONE:預設的,不顯示任何紀錄檔;
  • BASIC:僅記錄請求方法、URL、響應狀態碼及執行時間;
  • HEADERS:除了 BASIC 中定義的資訊之外,還有請求和響應的頭資訊;
  • FULL:除了 HEADERS 中定義的資訊之外,還有請求和響應的正文及後設資料。

首先需要對Feign的紀錄檔級別進行設定

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

新增組態檔

# feign紀錄檔以什麼級別監控哪個介面
logging.level.com.yellowstar.springcloud.service.PaymentFeignService=debug

接下來就可以觀察http請求的完整資訊了

到此這篇關於SpringCloud服務介面呼叫——OpenFeign的文章就介紹到這了,更多相關SpringCloud OpenFeign服務呼叫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com