服務遠程調用-Open Feign-微服務核心組件【分散式微服務筆記04】

来源:https://www.cnblogs.com/zydevelop/p/18307732/zy_springcloud04
-Advertisement-
Play Games

服務遠程調用-Open Feign-微服務核心組件【分散式微服務筆記04】 服務遠程調用-Open Feign Open Feign最大的價值就是,在不同的微服務中可以相互調用對方的介面 基本介紹 OpenFeign 是個聲明式WebService 客戶端,使用OpenFeign 讓編寫Web Se ...


服務遠程調用-Open Feign-微服務核心組件【分散式微服務筆記04】

服務遠程調用-Open Feign

  • Open Feign最大的價值就是,在不同的微服務中可以相互調用對方的介面

基本介紹

  1. OpenFeign 是個聲明式WebService 客戶端,使用OpenFeign 讓編寫Web Service 客戶端更簡單
  2. 使用方法: 定義一個服務介面然後在上面添加註解
  3. OpenFeign 也支持可拔插式的編碼器和解碼器。
  4. Spring Cloud 對OpenFeign 進行了封裝使其支持了Spring MVC 標準註解和HttpMessageConverters【消息轉換器】
  5. OpenFeign 可以與Eureka 和Ribbon 組合使用以支持負載均衡

Feign和Open Feign的區別

  • OpenFeign 就是在Feign 基礎上做了加強, 有些程式員為了方便,說Feign就是指的OpenFeign
Feign
  1. Feign是Spring Cloud組件中的一個輕量級RESTful的HTTP服務客戶端
  2. Feign內置了Ribbon,用來做客戶端負載均衡,去調用服務註冊中心的服務。
  3. Feign的使用方式是:使用Feign的註解定義介面,調用服務註冊中心的服務
  4. Feign本身不支持Spring MVC的註解,它有一套自己的註解
OpenFeign
  1. OpenFeign是Spring Cloud 在Feign的基礎上支持了Spring MVC的註解,如@RequesMapping等等。
  2. OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping註解下的介面
  3. OpenFeign通過動態代理的方式產生實現類,實現類中做負載均衡並調用其他服務

OpenFeign代碼實現

1.添加依賴

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

2.開發OpenFeign介面

@Component
@FeignClient(value = "MEMBER-SERVICE-PROVIDER") //指定調用的服務是哪個【可以是集群】
public interface MemberFeignService {

    //定義方法【就是遠程調用的介面】
    /*
    解析:
        1.遠程調用的方式 : get
        2.遠程調用的url :http://MEMBER-SERVICE-PROVIDER/member/get/{id}
        3.MEMBER-SERVICE-PROVIDER就是服務提供方在eureka-server註冊的服務【遠程對接時MEMBER-SERVICE-PROVIDER會由eureka來獲取 】
        4.openfeign 會根據負載均衡來決定調用集群中的哪個【預設時輪詢】
     */
    @GetMapping("/member/get/{id}") //這裡就是提供方的介面
    Result getMemberById(@PathVariable("id") Long id);
}
  • MEMBER-SERVICE-PROVIDER 就是服務提供方在eureka-server 註冊的服務,@FeignClient(value = "MEMBER-SERVICE-PROVIDER") 用於指定調用的服務是哪個【可以是集群】

3.編寫主啟動類

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//啟動 OpenFeignClient
public class MemberConsumerOpenfeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(MemberConsumerOpenfeignApplication.class, args);
    }
}

4.編寫Controller

@RestController
@RequestMapping("/member/consumer/openfeign")
public class MemberConsummerFeignController {

    @Autowired
    private MemberFeignService memberFeignService;

    @GetMapping("/get/{id}")
    public Result getMemberById(@PathVariable("id") Long id){
        return memberFeignService.getMemberById(id);
    }
}

5.訪問介面 http://localhost/member/consumer/openfeign/get/1 遠程調用成功

OpenFeign日誌配置

Feign 提供了日誌列印功能,可以通過配置來調整日誌級別,從而對Feign 介面的調用情況進行監控和輸出

日誌級別 描述
NONE 預設的,不顯示任何日誌
BASIC 僅記錄請求方法、URL、響應狀態碼及執行時間
HEADERS 除了BASIC中定義的信息之外,還有請求和響應的頭信息
FULL 除了HEADERS中定義的信息之外,還有請求和響應的正文及元數據

常見的日誌輸出級別有5 種,分別是error、warn、info、debug、trace

日誌輸出級別 描述
error 錯誤日誌,指比較嚴重的錯誤,對正常業務有影響,需要運維配置監控的
warn 警告日誌,一般的錯誤,對業務影響不大,但是需要開發關註
info 信息日誌,記錄排查問題的關鍵信息,如調用時間、出參入參等等
debug 用於開發DEBUG 的,關鍵邏輯裡面的運行時數據
trace 最詳細的信息,一般這些信息只記錄到日誌文件中

OpenFeign日誌配置示例:

  1. 編寫配置類

    @Configuration
    public class OpenFeignConfig {
    
        @Bean
        public Logger.Level loggerLevel(){
            return Logger.Level.FULL;
        }
    }
    
  2. 編寫application.yml

    server:
      port: 80
    
    spring:
      application:
        name: e-commerce-consumer-openfeign-80 #配置應用的名稱
    
    #配置eureka-client [略]......
    
    
    # OpenFeign日誌配置
    logging:
      level:
        #這裡com.zy88.springcloud.service.MemberFeignService 表示對應的介面;debug 表示日誌級別
        com.zy88.springcloud.service.MemberFeignService: debug 
    
  3. 訪問介面 http://localhost/member/consumer/openfeign/get/1 OpenFeign日誌配置 成功

OpenFeign調用超時

  • OpenFeign 預設超時時間1 秒鐘,即等待返回結果1 秒
修改預設超時時間

在application.yml修改即可

server:
  port: 80

spring:
  application:
    name: e-commerce-consumer-openfeign-80 #配置應用的名稱

#配置eureka-client【略】......

# 修改預設超時時間
ribbon:
  #設置feign 客戶端超時時間(openFeign 預設支持ribbon)
  #  ReadTimeout: 8000 表示 指的是建立連接後從伺服器讀取到可用資源所用的時間【時間單位是毫秒】
  ReadTimeout: 8000
  #指的是建立連接所用的時間,適用於網路狀況正常的情況下,
  #兩端連接所用的時間
  ConnectTimeout: 8000

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • **06 訪問修飾符 封裝 繼承 多態 ** 訪問修飾符 public 公開級別,對外公開 protected 受保護級別,對子類和同一個包中的類公開 default 預設級別,無修飾符,向同一個包的類公開 private 私有級別,只有類本身可以訪問,不對外公開 修飾符可以用來修飾類中的屬性,成員 ...
  • 演算法基礎 \(\text{Update: 2024 - 07 - 22}\) 複雜度 定義 衡量一個演算法的快慢,一定要考慮數據規模的大小。 一般來說,數據規模越大,演算法的用時就越長。 而在演算法競賽中,我們衡量一個演算法的效率時,最重要的不是看它在某個數據規模下的用時,而是看它的用時隨數據規模而增長的趨 ...
  • 擴展歐幾裡得演算法(Exgcd) 裴蜀定理 對於任意一組整數 \(a,b\),存在一組整數 \(x,y\),滿足 \(ax+by=\gcd(a,b)\)。 Proof: 考慮數學歸納法。 當 \(b=0\) 時,由於 \(\gcd(a,0)=a\),則對於 \(ax+0y=a\) 這個不定方程,\(x ...
  • Excel是一種具有強大的數據處理和圖表製作功能的電子錶格文件,而TXT則是一種簡單通用、易於編輯的純文本文件。將Excel轉換為TXT可以幫助我們將複雜的數據表格以文本的形式保存,方便其他程式讀取和處理。而將TXT轉換為Excel則可以將文本文件中的數據導入到Excel中進行進一步的分析和處理。 ...
  • 本文介紹基於R語言中的readxl包與ggplot2包,讀取Excel表格文件數據,並繪製具有多個系列的柱狀圖、條形圖的方法~ ...
  • c++ string初始化的幾種方式 相對於C#來說,c++中string的初始化方式真的非常多,比如以下都可以用來初始化string: using namespace std; int main() { string str1 = "test01" ;//直接賦值 string str2( 5, ...
  • 據最新數據顯示,京東員工總數已接近52萬人。這一數字是阿裡巴巴的2倍、騰訊的5倍、拼多多的30倍。對比其他互聯網公司普遍以降本增效為主基調,京東的員工數量反而增加。過去一年增加了66445人,近兩年總計增加13萬人。 ...
  • 正文 今天是 7 月 21 號,0721,然後柚子社入駐 B 站了,開始我以為是整活,結果發現是真的。草,這下 0721 真成柚子廚紀念日了。有點難綳又有點好笑。 睡覺的一天。我原以為 14:30 睡到 16:30 差不多了,結果一覺睡到 17:30。草。我想著周末,也就沒設鬧鐘了,睡到什麼時候隨緣 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...