最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud整合OpenFeign問題

 更新時間:2024年05月13日 10:37:45   作者:藤井大叔  
這篇文章主要介紹了SpringCloud整合OpenFeign問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

什么是OpenFeign

Feign是NetFlix開發(fā)的聲明式、模板化的HTTP客戶端,F(xiàn)eign可以幫助我們更便捷的調(diào)用HTTP API,F(xiàn)eign支持多種注解,

例如Feign自帶的注解或者JAX-RS注解等,OpenFeign是對Feign的加強(qiáng)版,使其支持Spring MVC注解,另外還整合了Nacos和Ribbon,從而使用Feign更加的方便,F(xiàn)eign主要的優(yōu)勢就在于可以做到調(diào)用遠(yuǎn)程服務(wù)時就像調(diào)用本地的服務(wù)一樣的體驗(yàn)。

開發(fā)者完全感知不到是遠(yuǎn)程API,更感知不到這是一個HTTP請求,它就像Dubbo一樣,consumer直接調(diào)用接口方法provider,而不需要通過常規(guī)的Http Client構(gòu)造請求在解析返回?cái)?shù)據(jù),主要還是解決了開發(fā)者無需關(guān)心調(diào)用遠(yuǎn)程API或無需關(guān)心分布式環(huán)境開發(fā)

整合OpenFeign

引入依賴

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

然后在啟動類上加上Feign的注解:@EnableFeignClients

加上后就可以開始調(diào)用其他服務(wù)的方法了,具體實(shí)現(xiàn)如下

@FeignClient注解中就是去指定我們所要調(diào)用的服務(wù)信息,里面兩個參數(shù)意思我在代碼中給大家提示了,緊接著我們就可以像正常的調(diào)用service層去調(diào)用此方法了。

package com.fujii.order.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @Author: Fujii
 * @description:
 */

/**
 * name:指定調(diào)用rest接口所對應(yīng)的服務(wù)名
 * path:指定調(diào)用rest接口所在的controller中的@RequestMapping
 */
@FeignClient(name = "stock-service",path = "/stock")
public interface StockFeignService {

    @GetMapping(value = "/reduct")
    public String reduct();
}

這里我也把示例給大家粘貼出來吧

package com.fujii.order.controller;

import com.fujii.order.feign.StockFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: Fujii
 * @description: 訂單服務(wù)
 */
@RestController
@RequestMapping(value = "/order")
public class OrderController {

    @Autowired
    private StockFeignService stockFeignService;

    @GetMapping(value = "/add")
    public String add(){
        System.out.println("下單成功!");
        String reduct = stockFeignService.reduct();
        return "下單成功!"+reduct;
    }
}

然后我們啟動服務(wù)查看是否能正常訪問,如下圖訪問正常,說明配置無誤

下面我在與大家說一下OpenFeign的其他的一些特性

日志配置

通過源碼可以看到日志等級分為4種

  • NONE【性能最佳,適用于生產(chǎn)環(huán)境】不記錄任何日志信息(默認(rèn)級別)
  • BASIC【適用于生產(chǎn)環(huán)境追蹤問題】僅記錄請求方法、URL、響應(yīng)狀態(tài)和執(zhí)行時間
  • HEADRS:記錄BASIC的基礎(chǔ)之上 在記錄請求和響應(yīng)的HEAD
  • FULL:【適用于開發(fā)環(huán)境和測試環(huán)境問題定位】記錄請求和響應(yīng)的HEAD、body和元數(shù)據(jù)

配置方式有兩種:

第一種:全局配置 使用@Configuration進(jìn)行全局配置

package com.fujii.order.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Author: Fujii
 * @description: OpenFeign日志輸出
 */
@Configuration
public class FeignConfig {

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

這里配置好后大家在設(shè)置一個日志級別為DEBUG級別,因?yàn)閟pringboot默認(rèn)的日志級別是info,而feign的debug日志就不會輸出出來

logging:
  level:
    com.fujii.order.feign: debug

設(shè)置好后去調(diào)用API后可以看到我調(diào)用了兩個服務(wù)為stock-service的和product-service的

上面這種是全局配置,那么想要設(shè)置成局部配置 也是很簡單,只需要在上面的config配置類中將@configuration注解清除掉 然后在配置文件中局部配置即可

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC

重啟可查看到是生效了

還有一種方式就是直接在feign service的調(diào)用服務(wù)中去調(diào)用配置類也是可以生效具體實(shí)現(xiàn)如下:

契約配置

契約配置主要是解決我們之前可能有些項(xiàng)目中使用到了feign 用的是feign的一些注解 但是我想在這基礎(chǔ)之上升級為OpenFeign 又不去改變原來的代碼 那么就可以使用契約配置來解決,實(shí)現(xiàn)方式也很簡單,以下是設(shè)置成局部修改成feign

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC
        contract: feign.Contract.Default #設(shè)置為默認(rèn)的契約模式

全局的需在配置文件中添加如下代碼

    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }

超時時間配置

超時時間主要是給我們的服務(wù)設(shè)置一個時間限制 超過這個限制則返回請求重試或者連接超時,設(shè)置起來也簡單,下面我來演示一下全局配置和局部配置

全局配置:

    @Bean
    public Request.Options options(){
        return new Request.Options(5000,10000);
    }

局部配置:

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC
        contract: feign.Contract.Default #設(shè)置為默認(rèn)的契約模式
        #連接超時時間:默認(rèn)是2秒
        connectionTimeout: 5000
        #請求處理超時時間 默認(rèn)是5秒
        readTimeout: 3000

當(dāng)超過限制之后,會報(bào)錯異常

自定義攔截器

openfign有一個攔截器可以幫助我們攔截服務(wù)中的一些請求的某些操作 實(shí)現(xiàn)的示例我放入以下參考,大家可以根據(jù)實(shí)際需求來擴(kuò)展攔截的信息

package com.fujii.order.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Author: Fujii
 * @description:
 */
public class CustomFeignIntercptor implements RequestInterceptor {
    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void apply(RequestTemplate requestTemplate) {
        requestTemplate.header("name","fujii");
        requestTemplate.query("id","1");
        requestTemplate.uri("9");
        logger.info("feign攔截器");
    }
}

在寫完攔截器之后我們還需要配置一下

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC
        contract: feign.Contract.Default #設(shè)置為默認(rèn)的契約模式
        #連接超時時間:默認(rèn)是2秒
        connectionTimeout: 5000
        #請求處理超時時間 默認(rèn)是5秒
        readTimeout: 10000
        requestInterceptors[0]: #feign攔截器
         com.fujii.order.interceptor.CustomFeignIntercptor

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯

    基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯

    這篇文章主要介紹了spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 最新評論

    西峡县| 安乡县| 丹江口市| 阳东县| 闽清县| 从化市| 东至县| 龙川县| 台东市| 广水市| 灵川县| 临西县| 鄄城县| 平安县| 吉安市| 枣阳市| 彰化市| 长岛县| 石台县| 晋中市| 铁岭市| 沽源县| 南平市| 左权县| 永仁县| 湘乡市| 武川县| 灵武市| 高台县| 塔城市| 黎川县| 晋城| 清原| 永宁县| 莒南县| 常熟市| 梁河县| 龙江县| 丰顺县| 招远市| 礼泉县|