中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微服務Springcloud之Feign如何使用

發布時間:2023-03-29 17:20:19 來源:億速云 閱讀:97 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“微服務Springcloud之Feign如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“微服務Springcloud之Feign如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、Feign概述

        Feign是Spring Cloud提供的聲明式、模板化的HTTP客戶端, 它使得調用遠程服務就像調用本地服務一樣簡單,只需要創建一個接口并添加一個注解即可。

        Spring Cloud集成Feign并對其進行了增強,使Feign支持了Spring MVC注解;Feign默認集成了Ribbon,所以Fegin默認就實現了負載均衡的效果。

微服務Springcloud之Feign如何使用

二、Feign入門

        注意:以下所有步驟實現的前提是需要在啟動類上加入注解 @EnableFeignClients 主要是為開啟feign接口掃描

1.創建服務提供者(provider)

導入依賴:

<!--Spring Cloud OpenFeign Starter -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

代碼如下(示例):

        在服務提供者中調用servic層獲取數據

//創建服務提供者
@RestController
@RequestMapping("/provider")
public class ProviderController {
	
	@Autowired
	private UserService userService;
 
	@RequestMapping("/getUserById/{id}")
	public User getUserById(@PathVariable Integer id){
		return userService.getUserById(id);
	}
}

2.創建feign接口    

代碼如下(示例):

        解釋都放在了代碼中,可以直接復制粘貼

/**
 * @FeignClient 一般采用服務名進行命名
 * name:指定FeignClient的名稱,如果項目使用了Ribbon,name屬性會作為微服務的名稱,用于服務發現
 * url: url一般用于調試,可以手動指定@FeignClient調用的地址
 *
 * @RequestMapping 主要用于feign框架拼接傳遞url,彌補了Ribbon的url需要手動拼接的缺陷
 * @PathVariable("id") 當路徑為restful風格時路徑傳參方式
 * @RequestParam("id") 當路徑為?id=250 時傳參方式
 * @RequestBody User user 當路徑為對象時采用的傳參方式,(集合、數組等都屬于對象)
 */
@FeignClient("feign-provider")
@RequestMapping("/provider")
public interface UserFeign {
 
    @RequestMapping("/getUserById/{id}")
    User getUserById(@PathVariable("id") Integer id);
 
    @RequestMapping("/deleteUserById")
    User deleteUserById(@RequestParam("id") Integer id);//?形式拼接參數,?id=250
 
    @RequestMapping("/addUser")
    User addUser(@RequestBody User user);//pojo--->json
}

3、創建服務消費者(consumer)

//服務消費者
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
 
    @Autowired
    private UserFeign userFeign;
 
    @RequestMapping("/getUserById/{id}")
    public User getUserById(@PathVariable Integer id){
        return userFeign.getUserById(id);
    }
}

        application.yml文件

server:
  port: 80
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.209.129:8848
  application:
    name: feign-consumer

三、Feign 原理

1、將feign接口的代理類掃描到Spring容器中:
        @EnableFeignClients開啟feign注解掃描:FeignClientsRegistrar.registerFeignClients()掃描被 @FeignClient標識的接口生成代理類,并把接口和代理類交給Spring的容器管理。
    2、為接口的方法創建RequestTemplate
        當consumer調用feign代理類時,代理類會調用SynchronousMethodHandler.invoke()創建RequestTemplate(url,參數)
    3、發出請求
        代理類會通過RequestTemplate創建Request,然后client(URLConnetct、HttpClient、OkHttp)使用Request發送請求

四、Feign優化

1、開啟feign日志

feign日志級別

微服務Springcloud之Feign如何使用

         在consumer的yml文件中加入以下代碼

 feign:
  client:
    config:
      feign-provider: #此處寫的是服務名稱,針對我們feign微服務的配置,如果是default就是全局配置
        loggerLevel: full #配置Feign的日志級別,相當于代碼配置方式中的Logger
 
#在application.yml中使用 logging.level.<Feign客戶端對應的接口的全限定名> 的參數配置格式來開啟指定客戶端日志
logging:
  level:
    com.bjpowernode.feign: debug

隨后啟動測試:

        出現以下結果表示日志輸出成功 

微服務Springcloud之Feign如何使用

2、feign超時問題

        首先、Feign的負載均衡底層用的就是Ribbon,所以這里的請求超時配置其實就是配置Ribbon,當出現請求超時會出現以下報錯。

微服務Springcloud之Feign如何使用

注意 :當開啟日志配置之后,feign超時問題不會出現報錯情況。

        針對超時問題我們需要在之前的日志配置中加入以下內容

ConnectTimeout: 5000 #請求連接的超時時間

ReadTimeout: 5000 #請求處理的超時時間

微服務Springcloud之Feign如何使用

3、http連接池

(1)、連接池介紹

        首先,我們知道HTTP連接需要經過三次握手,四次揮手的過程,這是很耗費性能的;所以HTTP連接池幫助我們節省了這一步。

        同時Feign的HTTP客戶端支持三種框架:

        HttpURLConnection、HttpClient、OkHttp;默認是HttpURLConnection

(2)、連接池使用

         先引入依賴到公共接口工廠interfac,如果沒有做公共接口就放入consumer

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

講真的,其實這已經完成了,但是,我們還是要知道一下它的原理,否則顯得太片面了

在配置文件中我們看到,連接池引入之后默認是開啟的,所以我們就不用再寫了

微服務Springcloud之Feign如何使用

4、gzip壓縮

壓縮能力

        當 Gzip 壓縮到一個純文本文件時,效果是非常明顯的,大約可以減少 70%以上的文件大小。&middot;

這個開啟也是比較簡單,只需要在consumer中yml文件中寫入以下代碼即可

微服務Springcloud之Feign如何使用

此時在瀏覽器中就可以看到我們提供的壓縮方式,和瀏覽器支持的壓縮方式 

微服務Springcloud之Feign如何使用

讀到這里,這篇“微服務Springcloud之Feign如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和静县| 武清区| 略阳县| 屯门区| 巴马| 友谊县| 织金县| 白山市| 全州县| 西青区| 婺源县| 万安县| 内乡县| 新邵县| 汝南县| 新安县| 哈尔滨市| 温州市| 开化县| 农安县| 霸州市| 开远市| 神农架林区| 孟津县| 金坛市| 陕西省| 邳州市| 古浪县| 阿拉善右旗| 康平县| 婺源县| 德格县| 隆尧县| 仙桃市| 惠来县| 延安市| 鄂托克前旗| 贺州市| 嵩明县| 新龙县| 横山县|