微服務實戰系列之Feign

前言

不知不覺,“微服務實戰系列”已完成了六篇,每篇都聚焦一個主題,目的是便于各位盆友能夠快速、全面地接收和消化。
博主從服務注冊到服務監控,從服務路由到服務安全,從身份認證到加密技術均有涉獵。凡此均有關微服務設計和運行的的方方面面,不得不考慮。
行文至此,博主腦門突然閃現出一個靈感:

微服務架構好比一個大型“部落”,所謂見“微”知大,不禁由衷感嘆一番。
這里有負責行政的,有負責交通的,有負責開戶的,有負責查證的,有負責安檢的,有負責監管的,有負責拉閘的,有負責限…的等等。

好了,博主帶著大家接著盤點微服務那些事兒,前序文章已聚齊,歡迎三連,有求必應:

  • 微服務實戰系列之Sentinel
  • 微服務實戰系列之Token
  • 微服務實戰系列之Nacos
  • 微服務實戰系列之Gateway
  • 微服務實戰系列之加密RSA
  • 微服務實戰系列之簽名Sign

劇情進入新的境界,今晚我們該聊聊關于Feign的前世今生了。


Q:什么是Feign

Fegin是一個通過Java調用HTTP的客戶端。其靈感來自于Retrofit、JAXRS-2.0和WebSocket。Feign的首要目標是降低調用HTTP服務的復雜性,而無需關心是否為RESTful。

官方文檔:spring-cloud-feign
官方代碼:spring-cloud-openfeign

一句話總結:Feign是一個的客戶端,基于此客戶端,我們可以調用異構型的http服務,而無需關心服務端是如何實現的
這不禁讓博主想到了WS,當初WS橫空初世的時候,口號無比響亮,效果異常出彩,贏得了世人眾多熱捧。無論什么人和事,簡單又純粹,自然就可愛。

在這里插入圖片描述

實踐應用

1. Feign客戶端
/*** 用戶服務*/
@FeignClient(contextId = "userService", value ="com-user", fallbackFactory = UserFallbackFactory.class)
public interface ProxyUserService
{/*** 通過用戶名查詢用戶信息*/@GetMapping("/user/info/{username}")public T<User> getUser(@PathVariable("username") String username, @RequestHeader("from") String source);
}
2. 服務降級Factory
/*** 服務降級factory*/
@Component
public class UserFallbackFactory implements FallbackFactory<UserService>
{@Overridepublic UserService create(Throwable throwable){log.error("用戶服務調用失敗:{}", throwable.getMessage());return new UserService(){@Overridepublic T<User> getUserInfo(String username, String source){return T.fail(throwable.getMessage());}}}
}
3. 檢索服務

通過@FeignClient中的value值,可以檢索到相應的微服務com-user,該名稱來自Nacos服務注冊的名稱,必須保持一致。

/*** 用戶服務com-user*/
@RestController
@RequestMapping("/user")
public class UserController 
{
@GetMapping("/info/{username}")public T<User> info(@PathVariable("username") String username){//TODO,此處省略...}
}

以上為Feign的核心代碼,博主大致做了簡單的介紹。當然還有其他配置, 比如日志管理、攔截器等,可以參見官方教程查閱。


結語

Feign可以幫助簡化 HTTP API 的調用,可以用于服務間調用,順便也集成了Hystrix。具備可這幾個特征,使其在微服務中,占據一席之地。
至此本篇已完結,又該說再見了,各位盆友有空接著聊~
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165337.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java核心知識點整理大全10-筆記

往期快速傳送門&#xff1a; Java核心知識點整理大全-筆記_希斯奎的博客-CSDN博客文章瀏覽閱讀9w次&#xff0c;點贊7次&#xff0c;收藏7次。Java核心知識點整理大全https://blog.csdn.net/lzy302810/article/details/132202699?spm1001.2014.3001.5501 Java核心知識點整理…

【LeetCode刷題】--67.二進制求和

67.二進制求和 方法&#xff1a;模擬計算 class Solution {public String addBinary(String a, String b) {StringBuilder ans new StringBuilder();int carry 0;for(int ia.length()-1,jb.length()-1;i>0||j>0;i--,j--){int sum carry;sum i >0 ? a.charAt(i) …

web:[WUSTCTF2020]樸實無華

題目 點開頁面顯示如下 頁面顯示了一行報錯&#xff1a;Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:3) in /var/www/html/index.php on line 4 意思為不能修改報頭信息-報頭已經發送(輸出開始于/var/www/html/i…

vue3 websocket連接 發送數據

先建一個websocket.js放在項目中&#xff0c;內容如下&#xff1a; var websock null; let rec; //斷線重連后&#xff0c;延遲5秒重新創建WebSocket連接 rec用來存儲延遲請求的代碼 let isConnect false; //連接標識 避免重復連接 let checkMsg "heartbeat"; /…

MySQL與Redis如何保證數據的一致性

文章目錄 MySQL與Redis如何保證數據的一致性&#xff1f;不好的方案1. 先寫 MySQL&#xff0c;再寫 Redis2. 先寫 Redis&#xff0c;再寫 MySQL3. 先刪除 Redis&#xff0c;再寫 MySQL 好的方案4. 先刪除 Redis&#xff0c;再寫 MySQL&#xff0c;再刪除 Redis5. 先寫 MySQL&am…

C# 數據庫封裝

最近有些地方用到c#&#xff0c;研究了一下&#xff0c;也有數據庫方面的操作&#xff0c;那就繼續封裝&#xff0c;自己用起來好用一點。 數據庫連接 using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Sys…

Leetcode算法系列| 1. 兩數之和(四種解法)

目錄 1.題目2.題解解法一&#xff1a;暴力枚舉解法二&#xff1a;哈希表解法解法三&#xff1a;雙指針(有序狀態)解法四&#xff1a;二分查找(有序狀態) 1.題目 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數…

『RabbitMQ』入門指南(安裝,配置,應用)

前言 RabbitMQ 是在 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 協議標準基礎上完整的&#xff0c;可復用的企業消息系統。它遵循 Mozilla Public License 開源協議&#xff0c;采用 Erlang 實現的工業級的消息隊列(MQ)服務器&#xff0c;建立在 Erlang …

產品經理提問常用的ChatGPT通用提示詞模板

如何評估產品市場的潛力和可行性&#xff1f; 如何定義和明確產品的目標用戶和需求&#xff1f; 如何進行競品分析和比較&#xff0c;制定產品的差異化策略&#xff1f; 如何設計產品的功能和特性&#xff0c;滿足用戶需求&#xff1f; 如何制定產品的定價策略和銷售計劃&a…

qml View3D使用介紹

在Qt Quick 3D中,View3D 是一個用于展示 3D 內容的 QML 類型。View3D 允許你將 3D 場景集成到 Qt Quick 2D 用戶界面中,這意味著你可以在傳統的 2D UI 元素(如按鈕、文本和圖像)與 3D 圖形之間無縫地進行整合。 View3D 提供了一個視口,用于渲染 3D 場景。它可以包括多個 …

HTTPS攻擊怎么防御?

HTTPS 簡介 超文本傳輸安全協議&#xff08; HTTPS &#xff09;是一種通過計算機網絡進行安全通信的傳輸協議。HTTPS 經由 HTTP 進行通信&#xff0c;但利用 SSL/TLS 來加密數據包。 HTTPS 開發的主要目的&#xff0c;是提供對網站服務器的身份認證&#xff0c;保護交換數據的…

批量將本地N個英文Html文檔進行中文翻譯-操作篇

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列ChatGPT和AIGC &#x1f449;關于作者 專注于Android/Unity和各種游戲開發技巧&#xff0c;以及各種資源分…

QtCreator9.02不支持JDK11解決

最終效果 使用Android Studio 下載Android SDK Platform 31與Sources for Android 31 下載Android SDK Build Tools 31.0.0 下載NDK 25.1 ,23.1 ,21.3 重要: 下載Android SDK Command-Line Tools ,選擇10.0或者9.0其中一個版本 其它版本不支持JDK11 ,本例選擇10.0 下載CMak…

如何進行MySQL的主從復制(MySQL5.7)

背景&#xff1a;在一些Web服務器開發中&#xff0c;系統用戶在進行數據訪問時&#xff0c;基本都是直接操作數據庫MySQL進行訪問&#xff0c;而這種情況下&#xff0c;若只有一臺MySQL服務器&#xff0c;可能會存在如下問題 數據的讀和寫的所有壓力都會由一臺數據庫獨…

淺析jdk8所包含的主要特性

至今Java 8仍然是許多開發者首選的JDK版本&#xff0c;Java 8的生態系統非常成熟&#xff0c;許多庫和框架都已經適配了Java 8。遷移到新的Java版本可能需要重新評估和調整現有的依賴關系&#xff0c;這對于一些大型項目可能是一個挑戰。那么Java 8有哪些特性讓多數開發者鐘愛呢…

西米支付:如何設計和構建游戲支付系統?

如何設計和構建游戲支付系統&#xff1f; 目前&#xff0c;游戲開發中最常見的支付方式包括微信支付、支付寶支付和蘋果支付等。今天&#xff0c;我將與大家分享游戲支付系統的架構和設計。 游戲支付的主要業務流程是指游戲玩家在游戲中購買虛擬物品或服務所進行的支付過程。一…

ElasticSearch 7 SQL 詳解

平時使用Elasticsearch的時候,會在Kibana中使用Query DSL來查詢數據.每次要用到Query DSL時都基本忘光了,需要重新在回顧一遍,最近發現Elasticsearch已經支持SQL查詢了(6.3版本以后),整理了下一些用法. 簡介 Elasticsearch SQL是一個X-Pack組件,它允許針對Elasticsearch實時執…

ESP32之避障

ESP32之避障 圖片 程序 int Led27;//定義LED 接口 int buttonpin4; //定義光遮斷傳感器接口 int val;//定義數字變量val void setup() { pinMode(Led,OUTPUT);//定義LED 為輸出接口 pinMode(buttonpin,INPUT);//定義避障傳感器為輸出接口 } void loop() {Serial.begin(9600);…

保姆級 Keras 實現 YOLO v3 一

保姆級 Keras 實現 YOLO v3 一 一. YOLO v3 總覽二. 特征提取網絡特征提取網絡代碼實現 三. 特征融合特征融合代碼實現 四. 網絡輸出模型輸出代碼實現 五. 網絡模型代碼實現六. 代碼下載 如果要給 YOLO 目標檢測算法一個評價的話, 就是快和準, 現在已經到了 v8, 但是我為什么還…

如何開啟MySQL的慢查詢日志

說明&#xff1a;如果需要查看某一條SQL查詢速度慢&#xff0c;并對慢的SQL進行優化&#xff0c;那么開啟MySQL慢查詢日志是一定要做的事情&#xff0c;本文介紹如何開啟MySQL的慢查詢日志&#xff1b; 查看MySQL慢查詢是否開啟 首先&#xff0c;輸入下面的命令&#xff0c;查…