springcloud-Feign配置一


一 前言

前文我們使用過了使用restTemplate結合Ribbon實現了HTTP遠程過程調用消費服務,由於使用直接使用RestTenplate進行服務調用不是很理想,所以我們選擇更好方式使用Feign進行Web Service 調用;之前文章的學習jdk版本都是基於javaSE8.0,Feign也是如此,不支持8.0以下,如果是初學者,請看知識追尋者cloud系列文章從頭開始看,否則會一頭霧水;

本篇文章的Feign只是入門級別,主要講解feign的工作流程,基本TTTP遠程調用,相關基本配置等,后續會出主流高級配置;

二 Feign 簡介

Feign的由來是基於retrofitjax-rsJSR 356, Java API for WebSocket;其內部對RestTemplate進行了封裝,在使用過程中簡化了HTTP遠程過程調用過程,使開發人員使用更加簡便;

Feign特色如下:

  1. 響應緩存支持,可多中類型選擇;支持擴展的緩存,如EhCache, Google, Spring;
  2. 完整的URI 模板表達式語言支持;
  3. 類SLF4J 日志支持;

三 Feign的工作流

@EnableFeignClients 表示開啟Feign功能,然后掃描 注解@FeignClient,程序啟動后,會將這些類掃描進IOC容器;Feign會 對 RestTemplate 進行 封裝,簡化HTTP遠程過程調用;RestTemplate使用Request 模板生成新的Requst 發送請求,其底層通常是基於URLConnection;

在這里插入圖片描述

四 Eureka-Client

在之前的Eureka-Clinet 工程的表現層包創建新的controller層API用於服務提供;

/**
 * @Author lsc
 * <p> 知識追尋者 Feign 服務消費</p>
 */
@RestController
public class FeignProvoderController {

    @GetMapping("zszxz/feign")
    public String getFeign(){
        return "the get method of feign test";
    }
}

五 Feign-client

在父工程中創建新的 子工程 Feign-client;

5.1 pom.xml

添加openfeign 依賴;

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

5.2 application.yml

這邊我們使用新的端口8093,應用名稱是 feign-client; 同樣將服務注入peer1,peer2,peer3;並且設置feign的客戶端屬性,比如連接時間,讀取時間,日志級別;

server:
  port: 8093

spring:
  application:
    name: feign-client # 應用名稱

eureka:
  client:
    service-url:
      # 服務注冊地址
      defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/

feign:
  client:
    config:
      default:
        connectTimeout: 5000 # 連接超時時間
        readTimeout: 5000   # 讀超時時間
        loggerLevel: full # 日志級別

5.3 service

在service 接口 上標明注解 @FeignClient表示 是 一個Feign的客戶端類; 屬性 name 表示 Feign客戶端名稱;value表示服務提供者的應用名稱;由於 eureka-client 中 提供了表現層API,我們 在service接口中定義相應的方法並且使用@GetMapping注解,里面配上需要調用的path,表示我們具體要消費的服務;

/**
 * @Author lsc
 * <p> </p>
 */
@FeignClient( name = "eureka-client", value = "eureka-client")
public interface FeignService {

    @GetMapping("zszxz/feign")
    public String getFeign();

}

5.4 controller

controller層也就是平常的表現層,沒什么特別之處,直接調用service接口提供的API;

/**
 * @Author lsc
 * <p> feign 表現層 </p>
 */
@RestController
public class FeignController {

    @Autowired
    FeignService feignService;

    @GetMapping("zszxz/feign")
    public String getFeign(){
        // 調用 getFeign方法
        return feignService.getFeign();
    }
}

5.5 啟動類

在啟動類上方標明@EnableFeignClients,其表示啟用feign功能,掃描@FeignClient 標明的類入IOC容器;

/**
 * @Author lsc
 * <p> feign啟動類</p>
 */
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//表示啟用feign
public class FeignApp {

    public static void main(String[] args) {
        SpringApplication.run(FeignApp.class,args);
    }

}

六 調用結果

6.1 工程結構如下

在這里插入圖片描述

6.2 結果

啟動工程,訪問地址 http://localhost:8093/zszxz/feign ; 結果如下如,表示使用Feign調用HTTP服務消費成功;

在這里插入圖片描述

七 @FeignClient注解說明

當 IOC容器中有相同的實例,@Autowired 會不起作用,此時會報錯,使用@Primary 標明哪一個實例是首要實例,會優先被IOC掃描注入;

屬性 說明
name Feign Client的名稱 支持占位符${}
serviceId 服務id
value 指定 serviceId
url 指定調用的URl, 支持占位符${}
decode404 404錯誤時,設置為true,會進行decode解碼,否則FeignException
fallback 容錯處理
fallbackFactory 生成fallback模板示例,減少重復代碼
path Path統一前綴
primary 設置為 primary Bean
qualifier 為Feign Client 新增注解@Qualifier

八 日志設置

每個 Feign client 都會創建日志,默認是接口的全類名作為日志名稱,日志響應僅支持debug模式;日志的配置方式有兩步驟,一是通過配置文件,二是通過JAVA注解配置類;

日志級別 說明
NONE 沒有日志(默認)
BASIC 請求和響應的狀態碼,時間
HEADERS 基於Basic加上請求和響應頭
FULL 請求和響應的 head ,body 和元數據

8.1 application.yml

在 application.yml 中添加如下配置

logging:
  level:
    com.zszxz.feign.service: Debug

8.2 config

配置類如下

/**
 * @Author lsc
 * <p> </p>
 */
@Configuration
public class FeignConfiguration {

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

8.3 指定Config

在 @FeignClien 中可以指定具體使用Feign的配置類,此時會覆蓋feign的默認配置;

@FeignClient( name = "eureka-client", value = "eureka-client",configuration = FeignConfiguration.class)

九參考文檔

https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM