Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護

在微服務架構中,服務之間的調用往往依賴 Feign,而服務調用的穩定性又至關重要。本文將介紹如何將 Feign 與 Sentinel 結合使用,實現服務的容錯保護(如降級與熔斷),提升系統的健壯性與可用性。


一、引入依賴

我們創建一個新的微服務,作為 Feign 調用方。pom.xml 中添加如下依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.1.RELEASE</version>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.1.RELEASE</version>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.2.RELEASE</version>
</dependency>

二、配置 application.yml

在配置文件中開啟 Feign 對 Sentinel 的支持,并配置基本信息:

server:port: 8380feign:sentinel:enabled: true  # 開啟 Sentinel 對 Feign 的支持spring:application:name: feigncloud:sentinel:transport:dashboard: localhost:8080  # Sentinel 控制臺地址nacos:discovery:server-addr: 127.0.0.1:8848  # Nacos 注冊中心地址

三、創建 Feign 接口

我們通過 Feign 調用名為 provider 的服務:

package com.southwind.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient("provider")
public interface ProviderFeign {@GetMapping("/index")String index();
}

四、編寫 Controller

通過注入 Feign 接口,實現接口調用:

package com.southwind.controller;import com.southwind.feign.ProviderFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class FeignController {@Autowiredprivate ProviderFeign providerFeign;@GetMapping("/index")public String index(){return providerFeign.index();}
}

五、自定義 Fallback 實現服務降級

當服務不可用或 Sentinel 觸發熔斷時,我們希望返回友好的降級提示,這就需要自定義 fallback 類:

1. 創建 fallback 實現類

package com.southwind.fallback;import com.southwind.feign.ProviderFeign;
import org.springframework.stereotype.Component;@Component
public class ProviderFeignFallback implements ProviderFeign {@Overridepublic String index() {return "index-fallback";}
}

2. 修改 FeignClient 注解,指定 fallback

package com.southwind.feign;import com.southwind.fallback.ProviderFeignFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(value = "provider", fallback = ProviderFeignFallback.class)
public interface ProviderFeign {@GetMapping("/index")String index();
}

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護

在微服務架構中,服務之間的調用往往依賴 Feign,而服務調用的穩定性又至關重要。本文將介紹如何將 Feign 與 Sentinel 結合使用,實現服務的容錯保護(如降級與熔斷),提升系統的健壯性與可用性。


一、引入依賴

我們創建一個新的微服務,作為 Feign 調用方。pom.xml 中添加如下依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.1.RELEASE</version>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.1.RELEASE</version>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.2.RELEASE</version>
</dependency>

二、配置 application.yml

在配置文件中開啟 Feign 對 Sentinel 的支持,并配置基本信息:

server:port: 8380feign:sentinel:enabled: true  # 開啟 Sentinel 對 Feign 的支持spring:application:name: feigncloud:sentinel:transport:dashboard: localhost:8080  # Sentinel 控制臺地址nacos:discovery:server-addr: 127.0.0.1:8848  # Nacos 注冊中心地址

三、創建 Feign 接口

我們通過 Feign 調用名為 provider 的服務:

package com.southwind.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient("provider")
public interface ProviderFeign {@GetMapping("/index")String index();
}

四、編寫 Controller

通過注入 Feign 接口,實現接口調用:

package com.southwind.controller;import com.southwind.feign.ProviderFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class FeignController {@Autowiredprivate ProviderFeign providerFeign;@GetMapping("/index")public String index(){return providerFeign.index();}
}

五、自定義 Fallback 實現服務降級

當服務不可用或 Sentinel 觸發熔斷時,我們希望返回友好的降級提示,這就需要自定義 fallback 類:

1. 創建 fallback 實現類

package com.southwind.fallback;import com.southwind.feign.ProviderFeign;
import org.springframework.stereotype.Component;@Component
public class ProviderFeignFallback implements ProviderFeign {@Overridepublic String index() {return "index-fallback";}
}

2. 修改 FeignClient 注解,指定 fallback

package com.southwind.feign;import com.southwind.fallback.ProviderFeignFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(value = "provider", fallback = ProviderFeignFallback.class)
public interface ProviderFeign {@GetMapping("/index")String index();
}

3.啟動類添加@EnableFeignClients注解

@SpringBootApplication
@EnableFeignClients
public class FeignApplication {public static void main(String[] args) {SpringApplication.run(FeignApplication.class, args);}}

六、運行與測試

  1. 啟動 Sentinel Dashboard(默認端口為 8080)。
  2. 啟動被調用服務 provider
  3. 啟動當前項目 feign
  4. 瀏覽器訪問:http://localhost:8380/index
  5. 停止 provider 服務,再次訪問,即返回 fallback 內容:index-fallback

七、總結

模塊說明
Feign簡化 HTTP 請求調用
Sentinel實現限流、熔斷與降級保護
fallback實現服務不可用時的降級邏輯
配置關鍵點開啟 feign.sentinel.enabled=true 并配置 fallback

通過本文的實踐,我們實現了 Feign + Sentinel 的無縫集成,使服務調用具備更強的容錯能力。建議大家在生產環境中為每個 Feign 接口都配置 fallback,防止服務雪崩。


如有幫助,歡迎點贊、評論、收藏!
后續將分享更多微服務高可用相關內容,敬請關注。

六、運行與測試

  1. 啟動 Sentinel Dashboard(默認端口為 8080)。
  2. 啟動被調用服務 provider
  3. 啟動當前項目 feign
  4. 瀏覽器訪問:http://localhost:8380/index
  5. 停止 provider 服務,再次訪問,即返回 fallback 內容:index-fallback

七、總結

模塊說明
Feign簡化 HTTP 請求調用
Sentinel實現限流、熔斷與降級保護
fallback實現服務不可用時的降級邏輯
配置關鍵點開啟 feign.sentinel.enabled=true 并配置 fallback

通過本文的實踐,我們實現了 Feign + Sentinel 的無縫集成,使服務調用具備更強的容錯能力。建議大家在生產環境中為每個 Feign 接口都配置 fallback,防止服務雪崩。


如有幫助,歡迎點贊、評論、收藏!
后續將分享更多微服務高可用相關內容,敬請關注。

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

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

相關文章

寵物醫院系統的設計與實現(springBoot版)

一、開題報告 一、本選題研究的意義和背景&#xff08;理論與現實意義&#xff09;&#xff1a; 背景&#xff1a;隨著人們生活水平的提高&#xff0c;寵物飼養愈發普遍&#xff0c;寵物醫院的需求也日益增長。掛號方式主要依賴現場掛號&#xff0c;導致寵物主人需要長時間排隊…

SOCKSv5 協議通信的完整階段與報文格式詳解

SOCKSv5 協議的通信通常分為以下幾個主要階段&#xff1a; 方法協商階段 (Method Negotiation)方法依賴的子協商階段 (Method-Dependent Sub-negotiation) - 本例為用戶名/密碼認證請求發送階段 (Request Sending)請求回復階段 (Request Reply)數據傳輸階段 (Data Transfer) …

??Git提交代碼Commit消息企業級規范

??Git Commit 類型完整指南?? 類型用途示例??feat??新增功能&#xff08;面向用戶的功能性變更&#xff09;git commit -m "feat: 添加用戶登錄功能"??fix??修復 Bug&#xff08;解決代碼中的問題&#xff09;git commit -m "fix: 修復首頁加載崩潰…

TiDB AUTO_RANDOM 超大主鍵前端精度丟失排查:JavaScript Number 限制與解決方案

前端長整型主鍵“失蹤”記 ——一次 ArrayIndexOutOfBoundsException 的排查全過程 一、事故現場 最近在維護 SMS-OFFICE 后臺系統時&#xff0c;運維同事反饋&#xff1a; 點擊「短信詳情」或「郵箱賬號詳情」時&#xff0c;偶爾彈窗空白、日志報錯&#xff1a; java.lang.A…

在postgresql使用mybatis動態創建數據庫分區表

在postgresql使用mybatis動態創建數據庫分區表 1. 整體描述2. 前期準備2.1 創建主表語句2.2 創建分表語句2.3 xxl-job 3. 代碼實現3.1 mapper.xml層3.2 mapper.java層3.3 service接口層3.4 service實現層3.5 controller層 4. 總結 1. 整體描述 在java下實現&#xff1a;創建分…

Python網安-zip文件暴力破解

目錄 源碼在這里 需要的模塊 準備一個密碼本和需要破解的ZIP文件 一行一行地從密碼文件中讀取每個密碼。 核心部分 注意&#xff0c;需要修改上段代碼注釋里的這段具有編碼問題的代碼&#xff1a; 源碼在這里 https://github.com/Wist-fully/Attack/tree/cracker 需要的…

聊聊Golang開發工程師

誕生背景 Go由Google三位頂尖工程師&#xff08;Ken Thompson、Rob Pike、Robert Griesemer&#xff09;設計&#xff0c;目標是解決兩大行業痛點&#xff1a; 硬件利用率不足&#xff1a;多核CPU普及&#xff0c;但C/C等語言難以高效利用并發能力&#xff1b; 開發效率低下&a…

機器學習6——線性分類函數

線性分類函數 分類問題的兩種決策方法&#xff1a; 概率方法&#xff1a;通過計算后驗概率進行分類。優點是在概率分布已知的情況下可以得到最優解&#xff0c;缺點是實際中概率密度通常未知&#xff0c;需要通過大量數據估計。判別方法&#xff1a;假設判別函數的形式已知&…

Sentinel(三):Sentinel熔斷降級

一、Sentinel熔斷概念介紹 官方文檔網址&#xff1a;circuit-breaking | Sentinel 1、Sentinel熔斷基本介紹 除了流量控制以外&#xff0c;對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措 施之一。一個服務常常會調用別的模塊&#xff0c;可能是另外的一個遠程服…

PostgreSQL 主從集群搭建

下面是 PostgreSQL 主從復制&#xff08;Streaming Replication&#xff09;環境的安裝與配置指南&#xff0c;適合在兩臺或多臺服務器之間構建一主一從&#xff08;或一主多從&#xff09;的高可用讀寫分離系統。 環境準備 角色主機名/IP說明主庫192.168.1.10可讀寫&#xff…

STM32安全固件升級:使用自定義 bootloader 實現SD卡固件升級,包含固件加密

前言 在 STM32 嵌入式開發中&#xff0c;Bootloader 是一個不可或缺的模塊。ST 公司為 STM32 提供了功能完備的官方 Bootloader&#xff0c;支持多種通信接口&#xff08;如 USART、USB DFU、I2C、SPI 等&#xff09;&#xff0c;適用于標準的固件更新方案。 然而&#xff0c…

一步部署APache編譯安裝腳本

接下來我來介紹以下編譯安裝的好處 編譯安裝的優點與缺點 一、優點 高度可定制 可根據實際需求啟用或關閉特性&#xff08;如 Apache 的模塊、MySQL 的引擎等&#xff09;。 靈活控制編譯參數、優化性能&#xff08;如 --enable-xxx、--with-xxx&#xff09;。 更高的性能…

[Linux]mmap()函數內存映射原理及用法

一、內存映射 內存映射&#xff0c;簡而言之就是將用戶空間的一段內存區域映射到內核空間&#xff0c;映射成功后&#xff0c;用戶對這段內存區域的修改可以直接反映到內核空間&#xff0c;同樣&#xff0c;內核空間對這段區域的修改也直接反映用戶空間。那么對于內核空間和用…

通信無BUG,ethernet ip轉profinet網關,汽車焊接設備通信有心機

在運用“激光釬焊”對汽車車頂、側面板、后行李箱蓋等位置進行接合時&#xff0c;必須配備能夠沿著復雜車身線條&#xff0c;對細窄焊接線實施高精度快速檢測及模仿控制的“焊縫跟蹤控制”。 那么汽車生產線的系統升級改造迫在眉睫&#xff0c;當西門子PLC和庫卡機器人無法通信…

python腳本ETH獲取最新發行版本并將是否更新信息發送到釘釘

import requests import json import time import hmac import hashlib import base64 import urllib.parse# 1. 配置釘釘機器人 webhook "https://oapi.dingtalk.com/robot/send?access_tokenXXX" secret "XXX" # 如果沒有加簽驗證&#xff0c;請設…

【Docker基礎】Docker容器管理:docker ps及其參數詳解

目錄 1 docker ps命令概述 1.1 命令定位與作用 1.2 命令基本語法 2 基礎參數詳解 2.1 默認輸出解析 2.2 核心參數解析 2.2.1 -a, --all 2.2.2 -q, --quiet 2.2.3 --no-trunc 3 高級過濾與格式化 3.1 過濾器(--filter)詳解 3.1.1 常用過濾條件 3.1.2 實際應用示例 …

應急響應-感染Neshta病毒

病毒確定&#xff1a; 根據感染現象確定為Virus/Win32.Neshta家族病毒 病毒表現&#xff1a; 該病毒為感染式病毒。該病毒會在系統%SystemRoot%目錄下釋放svchost.com文件&#xff0c;并通過添加注冊表的方式確保每個exe文件執行的時候都會先執行這個文件。該病毒還會收集系統信…

Hyperledger Fabric 入門筆記(二十)Fabric V2.5 測試網絡進階之Tape性能測試

文章目錄 前言一、介紹二、架構三、安裝說明四、使用方法4.1. 修改配置文件4.2. 啟動測試網絡4.3. 運行測試 前言 本文介紹由Hyperledger中國技術工作組提供的另一款區塊鏈網絡性能測試工具Tape的架構、安裝和在Fabric測試網絡中的使用。 一、介紹 Tape是一款輕量級的、可以快…

怎樣在 VS Code 中快速創建 Vue 單文件組件(SFC)的基礎模板結構?

問題 在Vue項目的開發中&#xff0c;我們經常遇到一個問題&#xff0c;創建新組件時要自己輸入基本的框架&#xff0c;比如&#xff1a; <template><div class"page-box"></div> </template><script> export default {name: ,data()…

高防IP在服務器中的作用都有哪些?

高防IP作為一種通過技術手段讓用戶網絡服務更加安全的一種IP地址&#xff0c;有著更高的防御能力&#xff0c;有著強大的流量清洗中心和防御系統&#xff0c;幫助企業實時監控網絡流量&#xff0c;將惡意的用戶請求識別并過濾掉&#xff0c;保護目標服務器不會受到網絡攻擊&…