亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

微服務(wù)Springcloud之Feign的基本使用

 更新時間:2023年03月29日 16:52:39   作者:JAVA販賣機  
這篇文章主要介紹了微服務(wù)Springcloud之Feign的基本使用,Spring?Cloud集成Feign并對其進行了增強,使Feign支持了Spring?MVC注解,需要的朋友可以參考下

前言

        當我們通過RestTemplate調(diào)用其它服務(wù)的API時,所需要的參數(shù)須在請求的URL中進行拼接,如果參數(shù)少的話或許我們還可以忍受,一旦有多個參數(shù)的話,這時拼接請求字符串就會效率低下。

一、Feign概述

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

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

二、Feign入門

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

1.創(chuàng)建服務(wù)提供者(provider)

導(dǎo)入依賴:

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

代碼如下(示例):

        在服務(wù)提供者中調(diào)用servic層獲取數(shù)據(jù)

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

2.創(chuàng)建feign接口    

代碼如下(示例):

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

/**
 * @FeignClient 一般采用服務(wù)名進行命名
 * name:指定FeignClient的名稱,如果項目使用了Ribbon,name屬性會作為微服務(wù)的名稱,用于服務(wù)發(fā)現(xiàn)
 * url: url一般用于調(diào)試,可以手動指定@FeignClient調(diào)用的地址
 *
 * @RequestMapping 主要用于feign框架拼接傳遞url,彌補了Ribbon的url需要手動拼接的缺陷
 * @PathVariable("id") 當路徑為restful風(fēng)格時路徑傳參方式
 * @RequestParam("id") 當路徑為?id=250 時傳參方式
 * @RequestBody User user 當路徑為對象時采用的傳參方式,(集合、數(shù)組等都屬于對象)
 */
@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);//?形式拼接參數(shù),?id=250
 
    @RequestMapping("/addUser")
    User addUser(@RequestBody User user);//pojo--->json
}

3、創(chuàng)建服務(wù)消費者(consumer)

//服務(wù)消費者
@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、為接口的方法創(chuàng)建RequestTemplate
        當consumer調(diào)用feign代理類時,代理類會調(diào)用SynchronousMethodHandler.invoke()創(chuàng)建RequestTemplate(url,參數(shù))
    3、發(fā)出請求
        代理類會通過RequestTemplate創(chuàng)建Request,然后client(URLConnetct、HttpClient、OkHttp)使用Request發(fā)送請求

四、Feign優(yōu)化

1、開啟feign日志

feign日志級別

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

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

隨后啟動測試:

        出現(xiàn)以下結(jié)果表示日志輸出成功 

2、feign超時問題

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

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

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

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

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

3、http連接池

(1)、連接池介紹

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

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

        HttpURLConnection、HttpClient、OkHttp;默認是HttpURLConnection

(2)、連接池使用

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

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

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

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

4、gzip壓縮

壓縮能力

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

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

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

 到此這篇關(guān)于微服務(wù)Springcloud之Feign的基本使用的文章就介紹到這了,更多相關(guān)微服務(wù)Feign的基本使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 獲取用戶的MAC地址多種方法實例詳解

    java 獲取用戶的MAC地址多種方法實例詳解

    這篇文章主要介紹了JAVA實現(xiàn)獲取用戶的MAC地址的多種方法實例,需要的朋友可以參考下
    2017-04-04
  • Mybatis和其他主流框架的整合使用過程詳解

    Mybatis和其他主流框架的整合使用過程詳解

    MyBatis最初是Apache的一個開源項目iBatis,?2010年6月這個項目由Apache?Software?Foundation遷移到了Google?Code,這篇文章主要介紹了Mybatis和其他主流框架的整合使用,需要的朋友可以參考下
    2023-11-11
  • eclipse中maven的pom.xml文件中增加依賴的方法

    eclipse中maven的pom.xml文件中增加依賴的方法

    日 在Maven項目中,可以使用pom.xml文件來添加依賴包,本文主要介紹了eclipse中maven的pom.xml文件中增加依賴的方法,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • spring+mybatis實現(xiàn)圖書管理系統(tǒng)

    spring+mybatis實現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了spring+mybatis實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 手把手帶你掌握SpringBoot RabbitMQ延遲隊列

    手把手帶你掌握SpringBoot RabbitMQ延遲隊列

    RabbitMQ 是一個由Erlang語言開發(fā)的AMQP的開源實現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 延遲隊列
    2021-09-09
  • Java Hibernate中的持久化類和實體類關(guān)系

    Java Hibernate中的持久化類和實體類關(guān)系

    Hibernate是一種Java對象關(guān)系映射框架,通過持久化類將Java對象映射到數(shù)據(jù)庫表中。持久化類需要實現(xiàn)無參構(gòu)造器、具有標識屬性和使用注解或XML進行映射。Hibernate通過Session來管理對象的狀態(tài),包括臨時狀態(tài)、持久化狀態(tài)和游離狀態(tài)
    2023-04-04
  • Spring boot 數(shù)據(jù)庫連接斷線重連問題

    Spring boot 數(shù)據(jù)庫連接斷線重連問題

    這篇文章主要介紹了Spring boot 數(shù)據(jù)庫連接斷線重連問題,需要的朋友可以參考下
    2017-06-06
  • springboot rabbitmq整合rabbitmq之消息持久化存儲問題

    springboot rabbitmq整合rabbitmq之消息持久化存儲問題

    這篇文章主要介紹了springboot rabbitmq整合rabbitmq之消息持久化存儲問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Maven 搭建開發(fā)環(huán)境

    Maven 搭建開發(fā)環(huán)境

    這篇文章主要介紹了Maven 如何搭建開發(fā)環(huán)境,文中講解非常細致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺談HashMap中7種遍歷方式的性能分析

    淺談HashMap中7種遍歷方式的性能分析

    本文先從HashMap的遍歷方法講起,然后再從性能、原理以及安全性等方面,來分析HashMap各種遍歷方式的優(yōu)勢與不足
    2021-06-06

最新評論