成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用OpenFeign的五個(gè)步驟和七個(gè)高級(jí)功能

開(kāi)發(fā) 前端
Feign是一個(gè)開(kāi)源的Java庫(kù),用于簡(jiǎn)化Web請(qǐng)求的過(guò)程。Feign是一個(gè)流行的Java HTTP客戶(hù)端庫(kù),具有多種優(yōu)勢(shì)和特性,是開(kāi)發(fā)基于HTTP的微服務(wù)和應(yīng)用程序的不錯(cuò)選擇。

什么是Feign?

Feign是一個(gè)開(kāi)源的Java庫(kù),用于簡(jiǎn)化Web請(qǐng)求的過(guò)程。

它通過(guò)提供更高級(jí)別的抽象來(lái)簡(jiǎn)化RESTful Web服務(wù)的實(shí)現(xiàn),消除了樣板代碼的需要,使代碼庫(kù)更具可讀性和可維護(hù)性。

Feign是一個(gè)流行的Java HTTP客戶(hù)端庫(kù),具有多種優(yōu)勢(shì)和特性,是開(kāi)發(fā)基于HTTP的微服務(wù)和應(yīng)用程序的不錯(cuò)選擇。

什么是聲明式HTTP客戶(hù)端?

聲明式HTTP客戶(hù)端是一種通過(guò)編寫(xiě)Java接口來(lái)發(fā)起HTTP請(qǐng)求的方式。

Feign會(huì)根據(jù)我們提供的注解,在接口背后生成實(shí)際的實(shí)現(xiàn)。

為何使用Feign?

如果我們需要調(diào)用大量的API,手動(dòng)編寫(xiě)HTTP代碼或使用難以維護(hù)的代碼生成方式并不理想。

使用Feign,我們可以通過(guò)一個(gè)簡(jiǎn)單的小接口來(lái)描述API,讓Feign在運(yùn)行時(shí)解釋和實(shí)現(xiàn)該接口,這樣更加簡(jiǎn)便且易于維護(hù)。

誰(shuí)適合使用Feign?

如果我們?cè)贘ava代碼中需要發(fā)起HTTP請(qǐng)求,并且不想編寫(xiě)樣板代碼,或者不想直接使用像Apache httpclient這樣的庫(kù),那么Feign是一個(gè)很好的選擇。

創(chuàng)建基本的Feign客戶(hù)端

步驟0:添加bom

我們依然使用feign-bom作為版本管理:

<project>
    ……
    <properties>
        <openfeign.version>13.4</openfeign.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-bom</artifactId>
                <version>${openfeign.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

步驟1:添加Feign依賴(lài)

引入feign-core:

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-core</artifactId>
</dependency>

步驟2:定義客戶(hù)端接口

該接口通常包含帶有Feign注解的方法聲明。

我們將為服務(wù)器上要調(diào)用的每個(gè)REST端點(diǎn)聲明一個(gè)客戶(hù)端接口方法,這些只是聲明,無(wú)需實(shí)現(xiàn)這些方法,F(xiàn)eign會(huì)為我們完成。方法簽名應(yīng)包括HTTP方法以及所有必需的數(shù)據(jù)。

假設(shè)我們要定義一個(gè)表示計(jì)算器服務(wù)的接口,它有執(zhí)行加法、減法、乘法和除法等計(jì)算的簡(jiǎn)單API方法:

public interface CalculatorService {
    /**
     * 兩整數(shù)相加。
     *
     * @param firstNumber  第一個(gè)整數(shù)
     * @param secondNumber 第二個(gè)整數(shù)
     * @return 兩數(shù)之和
     */
    @RequestLine("POST /operations/add?firstNumber={firstNumber}&secondNumber={secondNumber}")
    Long add(@Param("firstNumber") Long firstNumber,
             @Param("secondNumber") Long secondNumber);

    /**
     * 兩整數(shù)相減。
     *
     * @param firstNumber  第一個(gè)整數(shù)
     * @param secondNumber 第二個(gè)整數(shù)
     * @return 兩數(shù)之差
     */
    @RequestLine("POST /operations/subtract?firstNumber={firstNumber}&secondNumber={secondNumber}")
    Long subtract(@Param("firstNumber") Long firstNumber,
                  @Param("secondNumber") Long secondNumber);

    /**
     * 兩整數(shù)相乘。
     *
     * @param firstNumber  第一個(gè)整數(shù)
     * @param secondNumber 第二個(gè)整數(shù)
     * @return 兩數(shù)之積
     */
    @RequestLine("POST /operations/multiply?firstNumber={firstNumber}&secondNumber={secondNumber}")
    Long multiply(@Param("firstNumber") Long firstNumber,
                  @Param("secondNumber") Long secondNumber);

    /**
     * 兩整數(shù)相除。
     *
     * @param firstNumber  第一個(gè)整數(shù)
     * @param secondNumber 第二個(gè)整數(shù),不應(yīng)為零
     * @return 兩數(shù)之商
     */
    @RequestLine("POST /operations/divide?firstNumber={firstNumber}&secondNumber={secondNumber}")
    Long divide(@Param("firstNumber") Long firstNumber,
                @Param("secondNumber") Long secondNumber);
}

@RequestLine定義了請(qǐng)求的HTTP方法和url模板,而@Param定義了一個(gè)模板變量。

?

不用擔(dān)心,稍后我們將詳細(xì)了解OpenFeign提供的注解。

步驟3:創(chuàng)建客戶(hù)端對(duì)象

我們使用Feign的builder()方法來(lái)準(zhǔn)備客戶(hù)端:

final CalculatorService target = Feign
       .builder()
       .decoder(new JacksonDecoder())
       .target(CalculatorService.class, HOST);

準(zhǔn)備客戶(hù)端的方式有很多種,具體取決于我們的需求。

上面給出的代碼片段只是準(zhǔn)備客戶(hù)端的一種簡(jiǎn)單方式。

我們注冊(cè)了用于解碼JSON響應(yīng)的解碼器,解碼器可以根據(jù)服務(wù)返回的響應(yīng)的內(nèi)容類(lèi)型進(jìn)行更改,稍后我們將詳細(xì)了解解碼器。

步驟4:使用客戶(hù)端進(jìn)行API調(diào)用

現(xiàn)在讓我們調(diào)用客戶(hù)端的add()方法:

final Long result = target.add(firstNumber, secondNumber);

與其他HTTP客戶(hù)端相比,使用Feign HTTP客戶(hù)端調(diào)用服務(wù)相當(dāng)簡(jiǎn)單。

Feign注解

OpenFeign使用一組注解來(lái)定義HTTP請(qǐng)求及其參數(shù),常用的OpenFeign注解及其示例如下:

注解

描述

示例

@RequestLine

指定HTTP方法和路徑

@RequestLine("GET /resource/{id}")

@Headers

指定請(qǐng)求的HTTP頭

@Headers("Authorization: Bearer {token}")

@QueryMap

將查詢(xún)參數(shù)映射到請(qǐng)求

@QueryMap Map<String, Object> queryParams

@Body

發(fā)送特定對(duì)象作為請(qǐng)求體

@Body RequestObject requestObject

@Param

向請(qǐng)求添加查詢(xún)參數(shù)

@Param("id") long resourceId

@Path

替換路徑中的模板變量

@Path("id") long resourceId

@RequestHeader

向請(qǐng)求添加頭

@RequestHeader("Authorization") String authToken

@Headers

指定請(qǐng)求的其他頭

@Headers("Accept: application/json")

這些注解可以用來(lái)定義OpenFeign客戶(hù)端接口,使其易于使用OpenFeign與遠(yuǎn)程服務(wù)進(jìn)行交互。我們可以根據(jù)特定的API要求混合和匹配這些注解。

處理響應(yīng)

Feign還提供了一種聲明式的API集成方法。

與手動(dòng)編寫(xiě)處理響應(yīng)或錯(cuò)誤的樣板代碼不同,F(xiàn)eign允許我們定義自定義處理程序并將其注冊(cè)到Feign構(gòu)建器中。

這不僅減少了我們需要編寫(xiě)的代碼量,還提高了可讀性和可維護(hù)性。

讓我們看一個(gè)解碼器的示例:

final CalculatorService target = Feign.builder()
       .encoder(new JacksonEncoder())
       .decoder(new JacksonDecoder())
       .target(CalculatorService.class, HOST);

這段給定的代碼片段展示了創(chuàng)建一個(gè)Feign客戶(hù)端,使用Jackson進(jìn)行請(qǐng)求編碼和響應(yīng)解碼:

  • encoder(new JacksonEncoder()):在這里,為Feign客戶(hù)端設(shè)置了一個(gè)JacksonEncoder。JacksonEncoder是Feign Jackson模塊的一部分,用于將Java對(duì)象編碼為JSON格式的HTTP請(qǐng)求體。當(dāng)需要在請(qǐng)求體中發(fā)送對(duì)象時(shí),這特別有用。
  • decoder(new JacksonDecoder()):同樣,為Feign客戶(hù)端設(shè)置了一個(gè)JacksonDecoder。JacksonDecoder負(fù)責(zé)將服務(wù)器的JSON響應(yīng)解碼為Java對(duì)象,它將JSON響應(yīng)反序列化為相應(yīng)的Java對(duì)象。

處理錯(cuò)誤

錯(cuò)誤處理是構(gòu)建健壯可靠應(yīng)用程序的關(guān)鍵方面,尤其是在進(jìn)行遠(yuǎn)程API調(diào)用時(shí)。Feign提供了強(qiáng)大的功能來(lái)幫助有效地處理錯(cuò)誤。

Feign讓我們對(duì)處理意外響應(yīng)有更多的控制。我們可以通過(guò)構(gòu)建器注冊(cè)一個(gè)自定義的ErrorDecoder。

final CalculatorService target = Feign.builder()
       .errorDecoder(new CalculatorErrorDecoder())
       .target(CalculatorService.class, HOST);

以下是一個(gè)錯(cuò)誤處理的示例:

public class CalculatorErrorDecoder implements ErrorDecoder {
    private final ErrorDecoder defaultErrorDecoder = new Default();

    @Override
    public Exception decode(String methodKey, Response response) {
        ExceptionMessage message = null;
        try (InputStream bodyIs = response.body().asInputStream()) {
            ObjectMapper mapper = new ObjectMapper();
            message = mapper.readValue(bodyIs, ExceptionMessage.class);
        } catch (IOException e) {
            return new Exception(e.getMessage());
        }
        final String messageStr = message == null? "" : message.getMessage();
        switch (response.status()) {
            case 400:
                return new RuntimeException(messageStr.isEmpty()
                       ? "Bad Request"
                        : messageStr
                );
            case 401:
                return new RetryableException(response.status(),
                        response.reason(),
                        response.request().httpMethod(),
                        null,
                        response.request());
            case 404:
                return new RuntimeException(messageStr.isEmpty()
                       ? "Not found"
                        : messageStr
                );
            default:
                return defaultErrorDecoder.decode(methodKey, response);
        }
    }
}

所有HTTP狀態(tài)不在HTTP 2xx范圍內(nèi)的響應(yīng),例如HTTP 400,都將觸發(fā)ErrorDecoder的decode()方法。

在這個(gè)重寫(xiě)的decode()方法中,我們可以處理響應(yīng),將失敗包裝成自定義異常或執(zhí)行任何其他處理。

我們甚至可以通過(guò)拋出RetryableException來(lái)再次重試請(qǐng)求,這將調(diào)用注冊(cè)的Retryer。Retryer將在高級(jí)技術(shù)部分詳細(xì)解釋。

高級(jí)技術(shù)

集成編碼器/解碼器

編碼器和解碼器分別用于對(duì)請(qǐng)求和響應(yīng)數(shù)據(jù)進(jìn)行編碼/解碼。我們根據(jù)請(qǐng)求和響應(yīng)的內(nèi)容類(lèi)型選擇它們,例如,對(duì)于JSON數(shù)據(jù)可以使用Gson或Jackson。

以下是一個(gè)使用Jackson編碼器和解碼器的示例:

final CalculatorService target = Feign.builder()
       .encoder(new JacksonEncoder())
       .decoder(new JacksonDecoder())
       .target(CalculatorService.class, HOST);

更改HTTP客戶(hù)端

默認(rèn)情況下,F(xiàn)eign使用其自帶的HTTP客戶(hù)端。將Feign的默認(rèn)HTTP客戶(hù)端從原始的Apache HTTP Client更改為其他庫(kù)(如OkHttp)的主要?jiǎng)訖C(jī)是為了獲得更好的性能、改進(jìn)的功能以及與現(xiàn)代HTTP標(biāo)準(zhǔn)更好的兼容性。

現(xiàn)在讓我們看看如何覆蓋HTTP客戶(hù)端:

final CalculatorService target = Feign.builder()
       .client(new OkHttpClient())
       .target(CalculatorService.class, HOST);

配置日志記錄器

SLF4JModule用于將Feign的日志記錄發(fā)送到SLF4J。通過(guò)SLF4J,我們可以輕松使用我們選擇的日志后端(Logback、Log4J等)。

以下是一個(gè)構(gòu)建客戶(hù)端的示例:

final CalculatorService target = Feign.builder()
       .logger(new Slf4jLogger())
       .logLevel(Level.FULL)
       .target(CalculatorService.class, HOST);

要在Feign中使用SLF4J,需要將SLF4J模塊和我們選擇的SLF4J綁定添加到類(lèi)路徑中,然后按照上述方式配置Feign使用Slf4jLogger。

配置請(qǐng)求攔截器

Feign中的請(qǐng)求攔截器允許我們?cè)趯TTP請(qǐng)求發(fā)送到遠(yuǎn)程服務(wù)器之前對(duì)其進(jìn)行自定義和操作。它們可用于多種目的,例如添加自定義頭、日志記錄、身份驗(yàn)證或請(qǐng)求修改。

以下是我們可能希望在Feign中使用請(qǐng)求攔截器的原因:

  • 身份驗(yàn)證:我們可以使用請(qǐng)求攔截器向每個(gè)請(qǐng)求添加身份驗(yàn)證令牌或憑據(jù),例如添加帶有JWT令牌的“Authorization”頭。
  • 日志記錄:攔截器有助于記錄傳入和傳出的請(qǐng)求和響應(yīng),這對(duì)于調(diào)試和監(jiān)控很有用。
  • 請(qǐng)求修改:我們可以在發(fā)送請(qǐng)求之前修改請(qǐng)求,包括更改頭、查詢(xún)參數(shù)甚至請(qǐng)求體。
  • 速率限制:通過(guò)檢查發(fā)出的請(qǐng)求數(shù)量來(lái)決定是否允許或阻止請(qǐng)求,從而實(shí)現(xiàn)速率限制。
  • 緩存:根據(jù)特定標(biāo)準(zhǔn)緩存請(qǐng)求/響應(yīng)數(shù)據(jù)。

以下是一個(gè)演示如何使用請(qǐng)求攔截的代碼片段:

static class AuthorizationInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        // 檢查令牌是否存在,如果不存在則添加它
        template.header("Authorization", "Bearer " + generatedToken);
    }
}

public class CalculatorServiceTest {
    public static void main(String[] args) {
        final AuthorizationInterceptor interceptor = new AuthorizationInterceptor();
        final CalculatorService target = Feign.builder()
               .requestInterceptor(interceptor)
               .target(CalculatorService.class, HOST);
    }
}

實(shí)現(xiàn)RequestInterceptor并覆蓋其apply()方法,以根據(jù)需要對(duì)請(qǐng)求進(jìn)行任何修改。

配置重試器

OpenFeign Retryer是一個(gè)組件,允許我們配置Feign在請(qǐng)求失敗時(shí)如何處理重試。它對(duì)于處理網(wǎng)絡(luò)通信中的瞬時(shí)故障特別有用,我們可以指定Feign應(yīng)自動(dòng)重試失敗請(qǐng)求的條件。

重試器配置

要在OpenFeign中使用重試器,需要提供Retryer接口的實(shí)現(xiàn)。Retryer接口有兩個(gè)方法:

  • boolean continueOrPropagate(int attemptedRetries, int responseStatus, Request request):此方法用于確定是繼續(xù)重試還是傳播錯(cuò)誤。它接受?chē)L試重試的次數(shù)、HTTP響應(yīng)狀態(tài)和請(qǐng)求作為參數(shù),并返回true以繼續(xù)重試或false以傳播錯(cuò)誤。
  • Retryer clone():此方法創(chuàng)建重試器實(shí)例的克隆。

默認(rèn)重試器

Feign提供了一個(gè)默認(rèn)的重試器實(shí)現(xiàn),名為Retryer.Default。當(dāng)我們創(chuàng)建Feign客戶(hù)端而未顯式指定自定義重試器時(shí),將使用此默認(rèn)重試器。

它提供了兩個(gè)工廠方法來(lái)創(chuàng)建Retryer對(duì)象。

第一個(gè)工廠方法不需要任何參數(shù):

public Default() {
    this(100L, TimeUnit.SECONDS.toMillis(1L), 5);
}

它定義了一個(gè)簡(jiǎn)單的重試策略,具有以下特點(diǎn):

  • 最大嘗試次數(shù):對(duì)于失敗的請(qǐng)求,最多允許5次重試嘗試。
  • 退避期:在重試之間使用指數(shù)退避策略,從100毫秒的退避開(kāi)始,每次后續(xù)重試將退避時(shí)間加倍。
  • 可重試異常:如果請(qǐng)求導(dǎo)致任何被認(rèn)為可重試的異常(通常包括網(wǎng)絡(luò)相關(guān)異常,如連接超時(shí)或套接字異常),則會(huì)重試請(qǐng)求。

第二個(gè)工廠方法需要一些參數(shù)。如果默認(rèn)配置不適合我們,可以使用它:

public Default(long period, long maxPeriod, int maxAttempts)

// 使用它創(chuàng)建重試器
new Retryer.Default(1, 100, 10);

雖然Feign提供的默認(rèn)重試器涵蓋了許多常見(jiàn)的重試場(chǎng)景,但在某些情況下,我們可能希望定義自定義重試器。以下是定義自定義重試器的一些動(dòng)機(jī):

  • 精細(xì)控制:如果我們需要對(duì)默認(rèn)重試行為進(jìn)行更多控制,例如指定不同的最大重試次數(shù)或自定義退避策略,自定義重試器允許我們根據(jù)特定要求定制行為。
  • 重試邏輯:在某些情況下,我們可能只希望針對(duì)特定的響應(yīng)代碼或異常重試請(qǐng)求。自定義重試器允許我們實(shí)現(xiàn)自己的邏輯來(lái)確定何時(shí)應(yīng)該進(jìn)行重試。
  • 日志記錄和指標(biāo):如果我們想要記錄或收集與重試嘗試相關(guān)的指標(biāo),實(shí)現(xiàn)自定義重試器提供了添加此功能的機(jī)會(huì)。
  • 與斷路器集成:如果我們將斷路器模式與Feign結(jié)合使用,自定義重試器可以與斷路器的狀態(tài)集成,以便在決定何時(shí)重試或何時(shí)打開(kāi)斷路器時(shí)做出更明智的決策。
  • 非標(biāo)準(zhǔn)重試策略:對(duì)于不適合默認(rèn)重試器提供的標(biāo)準(zhǔn)重試策略的場(chǎng)景,例如速率限制的API或具有特定重試要求的API,我們可以定義適合我們用例的自定義重試器。

以下是在OpenFeign中實(shí)現(xiàn)自定義Retryer的示例:

public class CalculatorRetryer implements Retryer {
    /**
     * 重試之間等待的毫秒數(shù)
     */
    private final long period;

    /**
     * 最大重試次數(shù)
     */
    private final int maxAttempts;

    private int attempt = 1;

    @Override
    public void continueOrPropagate(RetryableException e) {
        log.info("Feign retry attempt {} of {} due to {}",
                attempt,
                maxAttempts,
                e.getMessage());
        if (++attempt > maxAttempts) {
            throw e;
        }
        if (e.status() == 401) {
            try {
                Thread.sleep(period);
            } catch (InterruptedException ex) {
                throw e;
            }
        } else {
            throw e;
        }
    }

    @Override
    public Retryer clone() {
        return this;
    }

    public int getRetryAttempts() {
        return attempt - 1; // 減去1以排除初始嘗試
    }
}

它專(zhuān)門(mén)重試HTTP 401錯(cuò)誤。

總之,當(dāng)我們需要對(duì)HTTP請(qǐng)求中的重試處理方式有更大的控制權(quán)和靈活性時(shí),就有必要在Feign中創(chuàng)建自定義重試器。當(dāng)我們的需求與默認(rèn)重試器的行為不同時(shí),自定義重試器允許我們根據(jù)特定用例修改重試邏輯。

斷路器

斷路器通常使用單獨(dú)的庫(kù)或工具(如Netflix Hystrix、Resilience4j或Spring Cloud Circuit Breaker)來(lái)實(shí)現(xiàn)。

為何使用斷路器?

在Feign中使用斷路器的主要?jiǎng)訖C(jī)是增強(qiáng)基于微服務(wù)的應(yīng)用程序的彈性。以下是一些關(guān)鍵原因:

  • 故障隔離:斷路器通過(guò)隔離故障組件,防止一個(gè)服務(wù)中的故障級(jí)聯(lián)到其他服務(wù)。
  • 快速失敗:當(dāng)電路打開(kāi)(表示故障狀態(tài))時(shí),后續(xù)請(qǐng)求會(huì)“快速失敗”,而不會(huì)嘗試向可能無(wú)響應(yīng)或故障的服務(wù)發(fā)出調(diào)用,從而減少延遲和資源消耗。
  • 優(yōu)雅降級(jí):當(dāng)依賴(lài)服務(wù)出現(xiàn)問(wèn)題時(shí),斷路器允許應(yīng)用程序優(yōu)雅降級(jí),確保它能夠繼續(xù)提供一組簡(jiǎn)化的功能。
  • 監(jiān)控和指標(biāo):斷路器提供指標(biāo)和監(jiān)控功能,使我們能夠跟蹤服務(wù)的健康狀況和性能。

配置斷路器

HystrixFeign用于配置Hystrix提供的斷路器支持。

Hystrix是一個(gè)延遲和容錯(cuò)庫(kù),旨在隔離分布式環(huán)境中對(duì)遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫(kù)的訪問(wèn)點(diǎn)。它有助于阻止級(jí)聯(lián)故障,并在故障不可避免的復(fù)雜分布式系統(tǒng)中實(shí)現(xiàn)彈性。

要在Feign中使用Hystrix,需要將Hystrix模塊添加到類(lèi)路徑中,并使用HystrixFeign構(gòu)建器,如下所示:

final CalculatorService target = HystrixFeign.builder()
      .target(CalculatorService.class, HOST);

讓我們看看如何使用回退類(lèi)來(lái)處理服務(wù)錯(cuò)誤。

在Hystrix中,回退類(lèi)是為Hystrix命令定義回退邏輯的另一種方式,而不是直接在Hystrix命令類(lèi)的getFallback方法中定義回退邏輯。回退類(lèi)提供了關(guān)注點(diǎn)分離,使我們能夠?qū)⒚铑?lèi)專(zhuān)注于主要邏輯,并將回退邏輯委托給單獨(dú)的類(lèi)。這可以提高代碼的組織性和可維護(hù)性。

以下是為CalculatorService實(shí)現(xiàn)回退的示例代碼:

@Slf4j
public class CalculatorHystrixFallback implements CalculatorService {

    @Override
    public Long add(Long firstNumber, Long secondNumber) {
        log.info("[Fallback add] Adding {} and {}", firstNumber, secondNumber);
        return firstNumber + secondNumber;
    }

    @Override
    public Long subtract(Long firstNumber, Long secondNumber) {
        return null;
    }

    @Override
    public Long multiply(Long firstNumber, Long secondNumber) {
        return null;
    }

    @Override
    public Long divide(Long firstNumber, Long secondNumber) {
        return null;
    }
}

為了演示回退,我們僅實(shí)現(xiàn)了add方法。然后在構(gòu)建客戶(hù)端時(shí)使用此回退:

final CalculatorHystrixFallback fallback = new CalculatorHystrixFallback();
final CalculatorService target = HystrixFeign.builder()
      .decoder(new JacksonDecoder())
      .target(CalculatorService.class,
               HOST, fallback);

當(dāng)add端點(diǎn)返回錯(cuò)誤或電路打開(kāi)時(shí),Hystrix將調(diào)用add回退方法。

收集指標(biāo)

Feign本身不像其他一些庫(kù)或框架那樣提供內(nèi)置的指標(biāo)功能API。

與Feign相關(guān)的指標(biāo),如請(qǐng)求持續(xù)時(shí)間、錯(cuò)誤率或重試次數(shù),通常需要使用外部庫(kù)或工具來(lái)收集和跟蹤。

在Java應(yīng)用程序中收集指標(biāo)的流行庫(kù)包括Micrometer和Dropwizard Metrics。

以下是如何使用常用的Micrometer庫(kù)來(lái)收集和報(bào)告與Feign調(diào)用相關(guān)的指標(biāo):

public class CalculatorServiceTest {
    public static void main(String[] args) {
        final CalculatorService target = Feign.builder()
              .addCapability(new MicrometerCapability())
              .target(CalculatorService.class, HOST);
        target.contributors("OpenFeign", "feign");
        // 從此時(shí)起指標(biāo)將可用
    }
}

請(qǐng)注意,我們需要將Micrometer作為依賴(lài)項(xiàng)添加到項(xiàng)目中并進(jìn)行適當(dāng)配置。

文末總結(jié)

本文算是溫故知新的一篇,由淺入深介紹了使用OpenFeign的5個(gè)步驟和7個(gè)高級(jí)功能,OpenFeign的使用方面,已經(jīng)涵蓋全了。后續(xù)再看看在SpringCloud中,OpenFeign的使用,以及在于Ribbon等組件結(jié)合使用時(shí),又能碰撞出哪些火花。

責(zé)任編輯:武曉燕 來(lái)源: 看山的小屋
相關(guān)推薦

2014-03-12 15:23:20

2022-08-02 20:22:01

SaaS安全網(wǎng)絡(luò)攻擊

2010-04-09 09:55:43

Oracle sqlp

2015-12-23 09:48:32

2023-06-01 13:09:09

智能建筑數(shù)字孿生

2023-03-06 08:48:52

2022-02-15 11:03:40

SD-WAN軟件定義WAN

2011-03-02 09:34:58

AppFuse

2023-07-10 13:28:43

智能建筑工具

2023-04-25 12:45:09

2024-05-07 08:00:00

自然語(yǔ)言處理機(jī)器學(xué)習(xí)

2022-04-13 10:25:08

基礎(chǔ)設(shè)施IT 團(tuán)隊(duì)

2019-07-11 15:26:50

數(shù)據(jù)中心技術(shù)數(shù)據(jù)網(wǎng)絡(luò)

2009-12-25 14:52:49

2021-11-22 12:13:54

Linuxwget 命令

2022-07-28 11:33:23

數(shù)據(jù)分析經(jīng)驗(yàn)

2024-07-26 10:28:50

前端開(kāi)發(fā)CSS

2022-03-01 20:20:18

云遷移云計(jì)算

2022-10-20 20:47:58

2020-10-10 16:07:16

物聯(lián)網(wǎng)設(shè)備物聯(lián)網(wǎng)IOT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91久久夜色| 亚洲黄色av网站 | 日韩最新网站 | 亚洲一区二区视频 | 欧美一区2区三区3区公司 | 国产精品一区二区久久精品爱微奶 | 久久久人成影片免费观看 | 久久免费精品视频 | 91免费观看在线 | 欧美一区二区三区日韩 | 国产精品一区二区久久久久 | 欧美成人手机视频 | 成人午夜精品 | 国产精品高潮呻吟久久 | 中文字幕国产一区 | 日韩欧美三级 | 欧美日韩精品中文字幕 | 日本久草视频 | 免费av观看 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 亚洲社区在线 | 91亚洲精华国产 | 天天天天天天操 | 国产精品激情在线 | 日韩视频精品 | 日日日日操 | 欧美日韩中文字幕在线 | 亚洲一区视频在线 | 精品视频在线观看 | 手机三级电影 | 韩国电影久久 | 久久免费视频网 | 国产一二区在线 | 欧美成人精品一区二区男人看 | 精品一区二区在线观看 | 日韩三区在线观看 | 亚洲小视频在线观看 | 日本天天操 | 国产高潮好爽受不了了夜夜做 | 不卡一区二区在线观看 | 日本在线小视频 |