Spring Cloud中的服務路由與過濾技術實現

Spring Cloud中的服務路由與過濾技術實現

大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!

在微服務架構中,服務路由與過濾是確保服務之間通信有效性和安全性的重要技術。Spring Cloud作為一個強大的微服務框架,提供了完善的服務路由與過濾機制,使得開發者可以輕松地實現這些功能。本文將詳細介紹如何在Spring Cloud中實現服務路由與過濾,并給出相關的Java代碼示例。

一、Spring Cloud Gateway簡介

Spring Cloud Gateway是Spring Cloud生態系統中的一個重要組件,用于實現動態路由、監控、彈性限流和安全等功能。它是基于Spring 5.0、Spring Boot 2.0和Project Reactor構建的,具有異步和非阻塞的特性。

二、服務路由的實現

服務路由是指根據請求的不同,將請求轉發到不同的微服務上。在Spring Cloud Gateway中,路由由RouteLocatorBuilder類來配置。下面是一個簡單的路由配置示例:

1. 引入依賴

pom.xml文件中引入Spring Cloud Gateway依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 配置路由

在Spring Boot應用的主類中配置路由:

package cn.juwatech.gateway;import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("path_route", r -> r.path("/api/service1/**").uri("http://localhost:8081")).route("host_route", r -> r.host("*.juwatech.cn").uri("http://localhost:8082")).build();}
}

在上述代碼中,定義了兩個路由規則:

  • 當請求路徑匹配/api/service1/**時,路由到http://localhost:8081
  • 當請求主機名匹配*.juwatech.cn時,路由到http://localhost:8082

三、服務過濾的實現

過濾器用于對請求和響應進行處理,可以實現認證、鑒權、日志記錄、請求修改等功能。Spring Cloud Gateway提供了多種內置過濾器,同時也支持自定義過濾器。

1. 內置過濾器

Spring Cloud Gateway提供了一些常用的內置過濾器,如AddRequestHeader、AddResponseHeader、RewritePath等。下面是一個使用內置過濾器的示例:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("rewrite_route", r -> r.path("/api/service2/**").filters(f -> f.rewritePath("/api/service2/(?<segment>.*)", "/${segment}").addRequestHeader("X-Request-Source", "Gateway")).uri("http://localhost:8083")).build();
}

在上述代碼中,使用了RewritePath和AddRequestHeader兩個過濾器,將請求路徑/api/service2/后的部分重寫,并添加一個請求頭。

2. 自定義過濾器

自定義過濾器可以滿足一些特殊需求。以下是一個自定義全局日志過濾器的示例:

package cn.juwatech.gateway;import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.util.logging.Logger;@Component
public class LoggingFilter implements GlobalFilter, Ordered {private static final Logger logger = Logger.getLogger(LoggingFilter.class.getName());@Overridepublic Mono<Void> filter(ServerWebExchange exchange, org.springframework.cloud.gateway.filter.GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();logger.info("Request URI: " + request.getURI());return chain.filter(exchange).then(Mono.fromRunnable(() -> {logger.info("Response Status Code: " + exchange.getResponse().getStatusCode());}));}@Overridepublic int getOrder() {return -1; // 優先級,數值越小優先級越高}
}

在上述代碼中,自定義了一個全局過濾器LoggingFilter,用于記錄請求URI和響應狀態碼。通過實現GlobalFilterOrdered接口,可以控制過濾器的執行順序。

四、綜合示例

最后,將路由和過濾結合起來,構建一個完整的Spring Cloud Gateway應用。以下是一個完整的示例,包括路由配置和自定義過濾器:

package cn.juwatech.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("service1_route", r -> r.path("/api/service1/**").filters(f -> f.addRequestHeader("X-Request-Source", "Gateway")).uri("http://localhost:8081")).route("service2_route", r -> r.host("*.juwatech.cn").filters(f -> f.rewritePath("/api/service2/(?<segment>.*)", "/${segment}")).uri("http://localhost:8082")).build();}
}

五、總結

本文詳細介紹了如何在Spring Cloud中實現服務路由與過濾技術。通過使用Spring Cloud Gateway,可以輕松地實現動態路由和復雜的過濾邏輯,提升微服務架構的靈活性和安全性。我們探討了路由配置、內置過濾器、自定義過濾器以及綜合示例,幫助大家更好地理解和應用這些技術。

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

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

相關文章

Python28-6 隨機森林

隨機森林算法詳細介紹 1. 理論背景 隨機森林&#xff08;Random Forest&#xff09;是一種由Leo Breiman和Adele Cutler在2001年提出的集成學習方法。它結合了多個決策樹的預測結果&#xff0c;以提高模型的準確性和魯棒性。 2. 算法細節 隨機森林的構建過程可以分為以下幾…

Qt——升級系列(Level Eight):界面優化

目錄 QSS 背景介紹 基本語法 QSS設置方式 指定控件樣式設置 全局樣式設置 從文件加載樣式表 使用Qt Designer 編輯樣式 選擇器 選擇器概況 子控件選擇器 偽類選擇器 樣式屬性 盒模型 控件樣式示例 按鈕 復選框、單選框 輸入框 列表 菜單欄 登錄界面 繪圖 基本概念 繪制各種形…

[Go 微服務] Kratos 使用的簡單總結

文章目錄 1.Kratos 簡介2.傳輸協議3.日志4.錯誤處理5.配置管理6.wire 1.Kratos 簡介 Kratos并不綁定于特定的基礎設施&#xff0c;不限定于某種注冊中心&#xff0c;或數據庫ORM等&#xff0c;所以您可以十分輕松地將任意庫集成進項目里&#xff0c;與Kratos共同運作。 API -&…

Linux內網端口轉公網端口映射

由于服務商做安全演練&#xff0c;把原先服務器內網的端口映射到外網端口全都關閉了&#xff0c;每次維護服務器特別麻煩&#xff0c;像數據庫查詢如果用原生的mysql 去連接&#xff0c;查詢返回的結果亂了&#xff0c;非常不方便。 查了服務還是可以正常訪問部分外網的&#x…

知識圖譜查詢語言的表示

文章目錄 SPARQL知識圖譜查詢基本構成常見的SPARQL查詢算子語義Markup表示語言SPARQL知識圖譜查詢基本構成 RDF 支持類似數據庫的查詢語言,叫作SPARQL,它提供了查詢RDF 數據的標準語法、處理SPARQL查詢的規則以及結果返回形式。 變量,RDF中的資源,以“?”或者“$”指示;…

【chatgpt】pytorch的全連接層FC

文章目錄 創建全連接層全連接層&#xff08;線性層&#xff09;使用 PyTorch 定義全連接層1. 定義一個全連接層2. 查看層的參數3. 使用全連接層 示例&#xff1a;構建一個簡單的神經網絡總結 打印FC參數輸出解釋完整代碼示例示例輸出總結 線性層的參數和屬性線性層的參數和屬性…

抖音外賣服務商入駐流程及費用分別是什么?入駐官方平臺的難度大嗎?

隨著抖音關于新增《【到家外賣】內容服務商開放準入公告》的意見征集通知&#xff08;以下簡稱“通知”&#xff09;的發布&#xff0c;抖音外賣服務商入駐流程及費用逐漸成為眾多創業者所關注和熱議的話題。不過&#xff0c;就當前的討論情況來看&#xff0c;這個話題似乎沒有…

軟件測試中安全測試包含內容及安全測試怎么測

一、軟件測試安全測試包含哪些 1. 漏洞掃描 漏洞掃描是軟件測試安全測試的基礎&#xff0c;它用于檢測應用程序和系統中存在的已知漏洞。安全測試工具如AppScan、OWASP ZAP和Nessus等可以對應用程序進行自動化掃描&#xff0c;發現可能存在的漏洞&#xff0c;如跨站點腳本&am…

7.2、指針變量的定義和使用

代碼 #include <iostream> using namespace std; #include <string>int main() {//定義指針int a 10;//指針定義語法&#xff1a;數據類型 * 指針變量名int * p;//讓指針記錄變量a的地址p &a;cout << "a的地址為&#xff1a;" << &am…

MySQL之應用層優化(二)

應用層優化 Web服務器問題 尋找最優并發度 每個Web服務器都有一個最佳并發度——就是說&#xff0c;讓進程處理請求盡可能快&#xff0c;并且不超過系統負載的最優的并發連接數。這就是前面說的最大系統容量。進行一個簡單的測量和建模&#xff0c;或者只是反復試驗&#xf…

2024年湖南省各市科小申報時間(科技型中小企業申報流程、條件、好處)新政

湖南省各市科小申報時間流程 一、評價管理 省科技廳牽頭負責科技型中小企業評價工作的組織和監督、實地核查、公示公告、入庫登記及編號撤銷和集中抽查工作&#xff0c;及時處理相關異議、投訴和舉報信息。 各市州科技局負責科技型中小企業評價工作的具體實施&#xff0c;組…

nginx SSI(Server Side Include)服務端包含 合并拼裝靜態內容

一、什么是SSI 在被傳送給瀏覽器之前&#xff0c;服務器會對 HTML 文檔進行完全地讀取、分析以及修改&#xff0c;使用SSI指令將文本、圖片或代碼信息包含到網頁中。對于整個頁面可以拆分成多個模塊&#xff0c;通過SSI指令將幾個模塊拼接成一個完整的頁面&#xff0c;當有內容…

【數據庫原理】課程筆記

數據庫原理 一、數據庫系統基礎 數據模型的類型 概念數據模型&#xff1a; 概念數據模型也稱概念模型或信息模型,是對現實世界中問題域內事務(特性)的描述,是以用戶觀點實現世界的模型(圖形表示)。主要用于描述事物的概念化結構,使數據庫的設計人員在設計初期,避開計算機系統及…

ATA-L2水聲功率放大器驅動水聲換能器的測試研究

隨著水聲通信技術的發展&#xff0c;水下通信設備也開始逐步走向實用化&#xff0c;為了滿足其實際的使用要求&#xff0c;功率放大器的設計需要具有高效率的特性&#xff0c;并能在水下長時間連續可靠的工作。 壓電陶瓷換能器主要負責電信號與聲信號之間的轉換&#xff0c;換能…

mybatis配置返回boolean類型

先大概說明一下ResultMap和ResultType的使用場景 ResultMap適用于復雜的查詢&#xff0c;可以處理多表關聯查詢、嵌套查詢等情況。通過ResultMap&#xff0c;可以更精確地控制查詢結果的映射。ResultType適用于簡單的查詢&#xff0c;而ResultMap適用于復雜的查詢。具體使用哪…

學習整理在php中使用PHPExcel讀取excel表列數大于Z時讀取不到的解決方案

php讀取excel列數大于Z時讀取不到 背景解決方案關鍵代碼 背景 表格數據超過26列&#xff0c; 也就是在Z列之前沒有AA列及以后的情況&#xff0c; 測試一直都沒有問題&#xff0c;超過&#xff0c;就會獲取不到數據了 解決方案 private function getExcelData(){//獲取excel文…

使用Python進行文件屬性修改

哈嘍,大家好,我是木頭左! 在計算機中,文件屬性是指與文件相關的元數據,如創建時間、修改時間、訪問時間等。這些屬性對于管理和組織文件非常重要。Python提供了一些內置的函數和方法,可以方便地修改文件的屬性。本文將介紹如何使用Python進行文件屬性的修改。 1. 獲取文件…

應用密碼學—(擴展)歐幾里得、DES、RSA、SHA-1算法

1. 歐幾里得算法 1.1 分析算法的實現原理 歐幾里德&#xff08;Euclid&#xff09;算法&#xff0c;也既常說的“輾轉相除法”&#xff0c;公式為gcd(m, n) { return gcd(n, m%n); }&#xff0c;對于任意兩個正整數m、n&#xff0c;每次求的一個數字r m % n&#xff0c;然后把…

教育場景中的自動化分揀系統!基于大象機器人UltraArm P340機械臂和傳送帶的實現

引言 今天我們將展示一個高度自動化的模擬場景&#xff0c;展示多個機械臂與傳送帶協同工作的高效分揀系統。在這個場景中&#xff0c;機械臂通過視覺識別技術對物體進行分類&#xff0c;并通過精確的機械操作將它們放置在指定的位置。這一系統不僅提高了分揀的速度和準確性&am…

PTrade怎么獲取KDJ隨機指標?想做量化策略怎么申請PTrade量化軟件?

get_KDJ - 隨機指標 get_KDJ(high, low, close, n9, m13, m23) 使用場景 該函數僅在回測、交易模塊可用 接口說明 獲取隨機指標KDJ指標的計算結果 PTrade是恒生公司開發的一款專業量化軟件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 參數 high&…