国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微服務(wù)遠程調(diào)用openFeign整合

這篇具有很好參考價值的文章主要介紹了微服務(wù)遠程調(diào)用openFeign整合。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

微服務(wù)遠程調(diào)用openFeign整合

?作者簡介:大家好,我是Leo,熱愛Java后端開發(fā)者,一個想要與大家共同進步的男人????
??個人主頁:Leo的博客
??當前專欄: 微服務(wù)探索之旅
?特色專欄: MySQL學(xué)習(xí)
??本文內(nèi)容:微服務(wù)遠程調(diào)用openFeign整合
???個人小站 :個人博客,歡迎大家訪問
??個人知識庫: 知識庫,歡迎大家訪問

在上一節(jié) Ribbon和 Nacos服務(wù)注冊中心, 我們學(xué)習(xí)了使用nacos進行服務(wù)注冊和服務(wù)發(fā)現(xiàn)以及Ribbon負載均衡以及他的簡單原理剖析。這一節(jié)我們來繼續(xù)認識SpringCloud的一些核心組件openFeign

1. 問題分析

先來看我們以前利用RestTemplate發(fā)起遠程調(diào)用的代碼:

微服務(wù)遠程調(diào)用openFeign整合

存在的問題:

  1. 在服務(wù)消費者中,我們把url地址硬編碼到代碼中,不方便后期維護。
  2. 在服務(wù)消費者中,不清楚服務(wù)提供者的狀態(tài)。
  3. 服務(wù)消費者調(diào)用服務(wù)提供者時候,如果出現(xiàn)故障能否及時發(fā)現(xiàn)不向用戶拋出異常頁面?
  4. RestTemplate這種請求調(diào)用方式是否還有優(yōu)化空間?能不能類似于Dubbo那樣玩?

2. 了解Feign

Feign是一個聲明式的http客戶端,官方地址:https://github.com/OpenFeign/feign

其作用就是幫助我們優(yōu)雅的實現(xiàn)http請求的發(fā)送,解決上面提到的問題。

微服務(wù)遠程調(diào)用openFeign整合

3. 項目整合Feign

Fegin的使用步驟如下:

3.1 引入依賴

我們在order-service服務(wù)的pom文件中引入feign的依賴:

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

3.2 添加注解

order-service的啟動類添加注解開啟Feign的功能:

微服務(wù)遠程調(diào)用openFeign整合

3.3 編寫Feign客戶端

package com.cisyam.order.client;

import com.cisyam.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author gaoziman
 */
@FeignClient("userservice")
public interface UserClient {

    /**
     * 通過用戶后編號去獲取用戶對象
     * @param id
     * @return
     */
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

這個客戶端主要是基于SpringMVC的注解來聲明遠程調(diào)用的信息,比如:

  • 服務(wù)名稱:userservice
  • 請求方式:GET
  • 請求路徑:/user/{id}
  • 請求參數(shù):Long id
  • 返回值類型:User

這樣,Feign就可以幫助我們發(fā)送http請求,無需自己使用RestTemplate來發(fā)送了。

3.4 測試

修改order-service中的OrderService類中的queryOrderById方法,使用Feign客戶端代替RestTemplate:

微服務(wù)遠程調(diào)用openFeign整合

3.5 總結(jié)

使用Feign的步驟:

① 引入依賴

② 添加@EnableFeignClients注解

③ 編寫FeignClient接口

④ 使用FeignClient中定義的方法代替RestTemplate

4. 自定義配置

Feign可以支持很多的自定義配置,如下表所示:

類型 作用 說明
feign.Logger.Level 修改日志級別 包含四種不同的級別:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder 響應(yīng)結(jié)果的解析器 http遠程調(diào)用的結(jié)果做解析,例如解析json字符串為java對象
feign.codec.Encoder 請求參數(shù)編碼 將請求參數(shù)編碼,便于通過http請求發(fā)送
feign. Contract 支持的注解格式 默認是SpringMVC的注解
feign. Retryer 失敗重試機制 請求失敗的重試機制,默認是沒有,不過會使用Ribbon的重試

一般情況下,默認值就能滿足我們使用,如果要自定義時,只需要創(chuàng)建自定義的@Bean覆蓋默認Bean即可。

下面以日志為例來演示如何自定義配置。

4.1 配置文件方式

基于配置文件修改feign的日志級別可以針對單個服務(wù):

feign:  
  client:
    config: 
      userservice: # 針對某個微服務(wù)的配置
        loggerLevel: FULL #  日志級別 

也可以針對所有服務(wù):

feign:  
  client:
    config: 
      default: # 這里用default就是全局配置,如果是寫服務(wù)名稱,則是針對某個微服務(wù)的配置
        loggerLevel: FULL #  日志級別 

而日志的級別分為四種:

  • NONE:不記錄任何日志信息,這是默認值。
  • BASIC:僅記錄請求的方法,URL以及響應(yīng)狀態(tài)碼和執(zhí)行時間
  • HEADERS:在BASIC的基礎(chǔ)上,額外記錄了請求和響應(yīng)的頭信息
  • FULL:記錄所有請求和響應(yīng)的明細,包括頭信息、請求體、元數(shù)據(jù)。

4.2 Java代碼方式

也可以基于Java代碼來修改日志級別,先聲明一個類,然后聲明一個Logger.Level的對象:

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // 日志級別為BASIC
    }
}

如果要全局生效,將其放到啟動類的@EnableFeignClients這個注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

如果是局部生效,則把它放到對應(yīng)的@FeignClient這個注解中:

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class) 

5. Feign使用優(yōu)化

Feign底層發(fā)起http請求,依賴于其它的框架。其底層客戶端實現(xiàn)包括:

  1. URLConnection:默認實現(xiàn),不支持連接池
  2. Apache HttpClient :支持連接池
  3. OKHttp:支持連接池

因此提高Feign的性能主要手段就是使用連接池代替默認的URLConnection。

這里我們用Apache的HttpClient來演示。

5.1 引入依賴

在order-service的pom文件中引入Apache的HttpClient依賴:

<!--httpClient的依賴 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

5.2 配置連接池

在order-service的application.yml中添加配置:

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志級別,BASIC就是基本的請求和響應(yīng)信息
  httpclient:
    enabled: true # 開啟feign對HttpClient的支持
    max-connections: 200 # 最大的連接數(shù)
    max-connections-per-route: 50 # 每個路徑的最大連接數(shù)

接下來,在FeignClientFactoryBean中的loadBalance方法中打斷點:

微服務(wù)遠程調(diào)用openFeign整合

Debug方式啟動order-service服務(wù),可以看到這里的client,底層就是Apache HttpClient

微服務(wù)遠程調(diào)用openFeign整合

總結(jié),Feign的優(yōu)化:

  1. 日志級別盡量用basic
  2. 使用HttpClientOKHttp代替URLConnection
    1. 引入feign-httpClient依賴
    2. 配置文件開啟httpClient功能,設(shè)置連接池參數(shù)

6. Feign最佳實踐

所謂 最佳時間,就是使用過程中總結(jié)的經(jīng)驗,最好的一種使用方式。

仔細的同學(xué)可以觀察可以發(fā)現(xiàn),Feign的客戶端與服務(wù)提供者的controller代碼非常相似:

feign客戶端

微服務(wù)遠程調(diào)用openFeign整合

UserController:

微服務(wù)遠程調(diào)用openFeign整合

有沒有一種辦法簡化這種重復(fù)的代碼編寫呢 ?大家想到的結(jié)局方式是什么呢 ?

這里提供兩種解決方式,看看你有沒有想到呢

6.1 繼承方式

一樣的代碼可以通過繼承來共享:

  1. 定義一個API接口,利用定義方法,并基于SpringMVC注解做聲明。
  2. Feign客戶端和Controller都集成改接口

微服務(wù)遠程調(diào)用openFeign整合

優(yōu)點:

  • 簡單
  • 實現(xiàn)了代碼共享

缺點:

  • 服務(wù)提供方、服務(wù)消費方緊耦合

  • 參數(shù)列表中的注解映射并不會繼承,因此Controller中必須再次聲明方法、參數(shù)列表、注解

6.2 抽取方式

FeignClient抽取為獨立模塊,并且把接口有關(guān)的POJO、默認的Feign配置都放到這個模塊中,提供給所有消費者使用。

例如,將UserClient、User、Feign的默認配置都抽取到一個feign-api包中,所有微服務(wù)引用該依賴包,即可直接使用。

微服務(wù)遠程調(diào)用openFeign整合

今天就到這里了,下一節(jié)我們繼續(xù)學(xué)習(xí)分享SpringCloud的相關(guān)組件----GateWay網(wǎng)關(guān)組件,歡迎大家評論區(qū)留言討論!文章來源地址http://www.zghlxwxcb.cn/news/detail-487775.html

到了這里,關(guān)于微服務(wù)遠程調(diào)用openFeign整合的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【springcloud微服務(wù)】springcloud整合openfeign使用詳解

    目錄 一、前言 二、微服務(wù)接口之間的調(diào)用問題 2.1 Httpclient 2.2 Okhttp 2.3 HttpURLConnection 2.

    2024年02月02日
    瀏覽(22)
  • day07-OpenFeign-服務(wù)調(diào)用

    day07-OpenFeign-服務(wù)調(diào)用

    https://github.com/spring-cloud/spring-cloud-openfeign OpenFeign是一個聲明式WebService客戶端,使用OpenFeign讓編寫Web Service客戶端更加簡單 它的使用方法是定義一個服務(wù)端口然后在上面添加注解 OpenFeign也支持可插拔式的編碼器和解碼器 SpringCloud對OpenFeign進行了封裝使其支持SpringMVC標準注解和

    2023年04月11日
    瀏覽(15)
  • 【SpringCloud】OpenFeign服務(wù)接口調(diào)用快速入門

    【SpringCloud】OpenFeign服務(wù)接口調(diào)用快速入門

    官網(wǎng)地址:點擊跳轉(zhuǎn) Feign是一個 聲明性web服務(wù)客戶端 。它使編寫web服務(wù)客戶端變得更容易。使用 Feign 創(chuàng)建一個接口并對其進行注釋。它具有可插入的注釋支持,包括Feign注釋和 JAX-RS 注釋。Feign 還支持可插拔編碼器和解碼器。Spring Cloud 添加了對 Spring MVC 注釋的支持,以及對

    2024年04月25日
    瀏覽(18)
  • SpringCloud openFeign 之 獲取被調(diào)用服務(wù)名

    一. 概述 低版本 feign 只能獲取到被調(diào)用方法的信息。 只有高版本 feign 才支持獲取到被調(diào)用服務(wù)的信息。 二. 代碼實現(xiàn) 三. 特別注意 在升級 feign-core 版本后,可能會出現(xiàn) java.lang.NoSuchMethodException 異常。這就說明有版本問題,此時需要定位到報錯位置,將對應(yīng)方法所屬 jar 包調(diào)

    2024年01月16日
    瀏覽(18)
  • 第五章 : Spring cloud 微服務(wù)調(diào)用-OpenFeign

    第五章 : Spring cloud 微服務(wù)調(diào)用-OpenFeign 前言 本章知識點:OpenFeign介紹、負載均衡Ribbon的算法、Spring cloud 如何通過RestTemplate調(diào)用微服務(wù),以及RestTemplate負載均衡原理。 OpenFeign介紹 Spring Cloud OpenFeign是一個聲明式、模板化的HTTP客戶端,主要用于Spring Cloud微服務(wù)之間的調(diào)用。以

    2024年02月02日
    瀏覽(25)
  • OpenFeign:Spring Cloud聲明式服務(wù)調(diào)用組件

    OpenFeign? Feign VS OpenFeign? OpenFeign實現(xiàn)遠程服務(wù)調(diào)用? OpenFeign超時控制? OpenFeign日志增強? Open Feign Spring官方推出的一種聲明式服務(wù)端調(diào)用與負載均衡組件。 OpenFeign常用注解 注解 說明 @FeignClient 通知OpenFeign組件對@RequestMapping注解下的接口解析,并通過動態(tài)代理的方式實現(xiàn)類

    2024年02月03日
    瀏覽(26)
  • 【springcloud微服務(wù)】Spring Cloud Alibaba 整合dubbo與openfeign

    dubbo與springcloud都可以單獨作為微服務(wù)治理框架在生產(chǎn)中進行使用,但使用過springcloud的同學(xué)大概了解到,springcloud生態(tài)的相關(guān)組件這些年已經(jīng)逐步停更,這就導(dǎo)致在服務(wù)架構(gòu)演進過程中的迭代斷層,以至于一些新的技術(shù)組件引入困難重重,于是在國內(nèi)的市場上就有了升級版的

    2024年02月07日
    瀏覽(91)
  • SpringCloud入門(微服務(wù)調(diào)用 OpenFeign)——從RestTemplate到OpenFeign & OpenFeign的相關(guān)配置 & 源碼的分析和請求流程拆解

    SpringCloud入門(微服務(wù)調(diào)用 OpenFeign)——從RestTemplate到OpenFeign & OpenFeign的相關(guān)配置 & 源碼的分析和請求流程拆解

    在之前的博客中,我們介紹了RestTemplate的使用,博客文章如下連接。但是在使用RestTemplate的時候,需要把生產(chǎn)者的路徑拼出來,非常繁瑣,另外參數(shù)的傳遞的也比較繁瑣,解決方案就是使用openFeign。 SpringCloud入門(RestTemplate + Ribbon)——微服務(wù)調(diào)用的方式 RestTemplate的使用 使

    2024年04月11日
    瀏覽(34)
  • Java之SpringCloud Alibaba【五】【微服務(wù) Sentinel整合openfeign進行降級】

    Java之SpringCloud Alibaba【五】【微服務(wù) Sentinel整合openfeign進行降級】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳轉(zhuǎn) Java之SpringCloud Alibaba【二】【微服務(wù)調(diào)用組件Feign】 跳轉(zhuǎn) Java之SpringCloud Alibaba【三】【微服務(wù)Nacos-config配置中心】 跳轉(zhuǎn) Java之SpringCloud Alibaba【四】【微服務(wù) Sentinel服務(wù)熔斷】 跳轉(zhuǎn) Java之SpringCloud Alibaba【五】【微服務(wù)

    2024年02月11日
    瀏覽(39)
  • Spring Cloud OpenFeign:基于Ribbon和Hystrix的聲明式服務(wù)調(diào)用

    Spring Cloud OpenFeign:基于Ribbon和Hystrix的聲明式服務(wù)調(diào)用

    ??wei_shuo的個人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! Spring Cloud OpenFeign是一個聲明式的服務(wù)調(diào)用框架,基于Feign并整合了Ribbon和Hystrix;目標是簡化分布式系統(tǒng)中編寫服務(wù)間調(diào)用的代碼,并提供一種更加優(yōu)雅和便捷的方式來進行服務(wù)之間的通信 依賴導(dǎo)入 application.yml配置 啟

    2024年02月05日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包