(九)Spring Cloud Alibaba 2023.x:微服務接口文檔統一管理與聚合

目錄

前言

準備

實踐

網關服務配置

1.pom.xml 引入 webflux 版本 springboc 依賴

2.application-dev.yml 配置 springboc 多服務地址

3.application-dev.yml 配置springboc 文檔路由

4.網關過濾器AuthFilter.class 中放行 springboc 訪問路徑

業務服務配置

1.pom.xml 引入 webmvc 版本 springboc 依賴

2.新增 springdoc 接口文檔配置類

調試

1.啟動并訪問

2.請求登錄接口

3.請求用戶名稱接口


前言

在上一篇文章中,我們提到微服務的 API 提供方案選擇了 業務子服務高度自治、獨立提供 API 接口 的模式,并通過 統一的網關服務 將請求轉發到具體的子服務進行邏輯處理。這樣雖然保證了子服務的獨立性,但也帶來了一個新的問題:項目中的接口分散在不同的子服務中,訪問入口地址各不相同,給接口的統一管理與查看帶來了不小的挑戰。
本篇文章將圍繞這一問題展開,介紹如何在分布式的微服務架構下,實現接口的集中管理與統一查看

準備

主要依賴版本:

  • spring boot 3.3.5
  • spring cloud 2023.0.1
  • spirng cloud alibaba 2023.0.1.0
  • jdk 17

參看源碼地址:

About 基于spring cloud alibaba生態快速構建微服務腳手架

實踐

網關服務配置

1.pom.xml 引入 webflux 版本 springboc 依賴

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webflux-ui</artifactId><version>2.6.0</version>
</dependency>

2.application-dev.yml 配置 springboc 多服務地址

springdoc:swagger-ui:urls:- name: cloud-producerurl: /cloud-producer/v3/api-docs- name: cloud-consumerurl: /cloud-consumer/v3/api-docs- name: 用戶服務url: /cloud-user/v3/api-docs

3.application-dev.yml 配置springboc 文檔路由

每個有 api 文檔的服務都需要配置,可新增到接口路由地址后面

spring:cloud:gateway:discovery:locator:enabled: true  # 開啟自動服務發現routes:#此處省略之前配置的服務路由配置- id: cloud-user-docsuri: lb://cloud-userpredicates:- Path=/cloud-user/v3/api-docs- id: cloud-consumer-docsuri: lb://cloud-consumerpredicates:- Path=/cloud-consumer/v3/api-docs- id: cloud-producer-docsuri: lb://cloud-producerpredicates:- Path=/cloud-producer/v3/api-docs

4.網關過濾器AuthFilter.class 中放行 springboc 訪問路徑

@Slf4j
@Component
public class AuthFilter implements GlobalFilter, Ordered {private static final List<String> EXCLUDE_PATH_LIST = List.of("/cloud-user/user/login");@Resourceprivate RedisTemplate redisTemplate;private static final String SECRET_KEY = "expected-secret";@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();String requestURI = request.getURI().getPath();// 白名單直接放行if (EXCLUDE_PATH_LIST.stream().anyMatch(requestURI::startsWith) ||requestURI.contains("/v3/api-docs") ||requestURI.contains("/doc.html")) {//...}}
}

業務服務配置

不需要單獨在每個服務子服務中配置,因為我們前面提供了一個公共服務 cloud-common,每個業務子服務都引入了,所以只需要在公告服務中配置就能生效

1.pom.xml 引入 webmvc 版本 springboc 依賴

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version>
</dependency>

2.新增 springdoc 接口文檔配置類

  • 統一配置每個服務接口訪問前綴
  • 添加全局請求頭 token 屬性字段
@Configuration
public class OpenApiConfig {@Value("${spring.application.name}")private String serverName;private static final String SECURITY_SCHEME_NAME = "TokenAuth";@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().servers(List.of(new Server().url("http://localhost:9090/" + serverName) // 這里寫網關地址))  // 配置全局 SecurityScheme.components(new Components().addSecuritySchemes(SECURITY_SCHEME_NAME,new SecurityScheme().type(SecurityScheme.Type.APIKEY).in(SecurityScheme.In.HEADER).name(HttpHeaders.AUTHORIZATION) // 請求頭token字段名))// 應用到所有接口.addSecurityItem(new SecurityRequirement().addList(SECURITY_SCHEME_NAME));}
}

注:http://localhost:9090網關地址根據具體環境進行調整

調試

1.啟動并訪問

啟動網關服務:cloud-gateway

啟動業務子服務:cloud-user

訪問路徑:http://localhost:9090/swagger-ui.html

2.請求登錄接口

3.請求用戶名稱接口

將登錄返回的 token 設置到文檔全局 token 中

請求接口成功

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

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

相關文章

在Cursor里安裝極其好用的Mysql Database Client 插件

&#x1f4f8; 插件界面展示 圖片1&#xff1a;插件主界面和連接配置圖片2&#xff1a;數據編輯和查詢結果展示&#x1f3af; 核心優勢 1. 直接編輯數據 - 像DataGrip一樣強大 ? 點擊即編輯: 直接雙擊數據單元格&#xff0c;立即進入編輯模式? 實時保存: 編輯完成后按 Enter …

Cursor 不香了?替代與組合實踐指南(Windsurf、Trae、Copilot、MCP)

當你感覺 Cursor 的產出質量和穩定性不如從前&#xff0c;未必一定要“全盤換掉”。本文從“替代”與“組合”兩個維度給出可落地的工具編排方案&#xff0c;并附帶決策矩陣與常見工作流&#xff0c;幫助你在不同場景獲得穩定、可控的產出。0. 適用讀者 正在使用或評估 Cursor&…

【MFC】對話框屬性:X Pos(X位置),Y Pos(Y位置)

前言 本文介紹對話框屬性中的X Pos(X位置)、Y Pos(Y位置)&#xff0c;同時給出相關示例便于理解。 目錄1 位置2 詳解3 示例1 位置 首先介紹一下這個屬性在哪里。 在資源視圖中雙擊對話框節點&#xff0c;打開該對話框&#xff1b; 鼠標右鍵工作區空白處&#xff0c;單擊屬性&am…

Java面試小冊(1)

1【Q】&#xff1a;序列化和反序列化【A】&#xff1a;序列化是將Java對象轉化為字節流&#xff0c;用于網絡傳輸&#xff0c;持久化或緩存。Java提供了java.io.Serializable接口實現序列化。反序列化是將字節流轉為為對象。2【Q】&#xff1a; Java中Exception和Error有什么區…

html獲取16個隨機顏色并不重復

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>16個不重復隨機顏色</title><style>…

Redis 緩存穿透、擊穿、雪崩:防御與解決方案大全

&#x1f6e1;? Redis 緩存穿透、擊穿、雪崩&#xff1a;防御與解決方案大全 文章目錄&#x1f6e1;? Redis 緩存穿透、擊穿、雪崩&#xff1a;防御與解決方案大全&#x1f9e0; 一、緩存穿透&#xff1a;防御不存在數據的攻擊&#x1f4a1; 問題本質與危害&#x1f6e1;? 解…

量子計算機的發展對傳統密碼學的打擊

量子計算機的發展對傳統密碼學的核心威脅&#xff0c;源于其能高效解決傳統計算機“計算不可行”的數學問題——而這些問題正是當前主流密碼算法保障安全的基石。這種影響并非“全面摧毀”&#xff0c;而是針對傳統密碼學的不同分支&#xff08;非對稱密碼、對稱密碼、哈希函數…

《var, let, const:現代JS聲明指南》

文章目錄JavaScript 中 var、let、const 的差異1. 作用域&#xff08;Scope&#xff09;2. 變量提升&#xff08;Hoisting&#xff09;3. 重復聲明4. 變量值是否可變對比表5. 示例代碼總結JavaScript 中 var、let、const 的差異 1. 作用域&#xff08;Scope&#xff09; var 函…

在 Docker 中安裝 MySQL 教程

拉取 MySQL 鏡像docker pull mysql:8.0創建并啟動 MySQL 容器docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v mysql_data:/var/lib/mysql \mysql:8.0命令說明&#xff1a;-d&#xff1a;后臺運行容器 --name mysql8&#xff1a;給容器起個名字…

C#線程理解

目錄 一.線程類 1.基礎線程類&#xff08;Thread&#xff09; 2.線程池類&#xff08;Threadpool&#xff09; 3.任務并行庫&#xff08;Task&#xff09; 4.并行循環&#xff08;Parallel&#xff09; 二.線程池(threadPool)和Thread/Task之間的聯系 1.ThreadPool和Thr…

Java入門級教程16——JUC的安全并發包機制

目錄 1.JUC的安全并發包機制 1.1 包含 1.2 Barrier(柵欄)機制——CyclicBarrier&#xff08;循環屏障&#xff09; 1.2.1 定義 1.2.2 特性 1.2.1 模擬包車 1.2.2 模擬學生到齊上課 1.2.3 計算任務總耗時 1.3 CountDownLatch(閉鎖)機制 1.3.1 定義 1.3.2 特性 1.3.3…

【網絡通信】全面解析MAC地址:網絡設備的唯一標識

【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識 文章目錄【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識前言一、MAC 地址的定義&#xff1a;設備的 “網絡身份證”?二、MAC 地址的格式與組成&#xff1a;48 位的 “數字編碼”?三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默認啟用現代分析引擎、支持 MISRA C:2025 新規、CI構建性能提升等

Perforce Klocwork 現已更新至2025.2版本&#xff01;該版本增強了對 C/C的分析能力&#xff0c;提升了現代 C 分析的準確性&#xff0c;并改進了對源文件編碼的支持。該版本還為 MISRA C:2025 標準引入了新的分類體系&#xff0c;并增強了 Visual Studio Code 插件的可用性。 …

機器人馭風而行:低空經濟如何開啟智能新紀元【科普類】

新晉碼農一枚&#xff0c;小編會定期整理一些寫的比較好的代碼和知識點&#xff0c;作為自己的學習筆記&#xff0c;試著做一下批注和補充&#xff0c;轉載或者參考他人文獻會標明出處&#xff0c;非商用&#xff0c;如有侵權會刪改&#xff01;歡迎大家斧正和討論&#xff01;…

Java學習筆記四(繼承)

1 繼承繼承的實現&#xff1a;public class 子類 extends 父類 {… }注釋&#xff1a;子類可直接使用&#xff0c;父類&#xff08;保護&#xff0c;公開&#xff09;的屬性和方法優點&#xff1a;減少重復代碼&#xff0c;缺點&#xff1a;只能單繼承// 父類 public class Tes…

NAT技術:SNAT與DNAT區別詳解

1. 什么是NAT&#xff1f; 定義&#xff1a;NAT 是一種網絡技術&#xff0c;用于在私有網絡&#xff08;如家庭或企業局域網&#xff09; 與 公共網絡&#xff08;如互聯網&#xff09; 之間轉換IP地址。它允許使用私有IP地址的設備通過一個&#xff08;或多個&#xff09;公共…

java語言中,list<String>轉成字符串,逗號分割;List<Integer>轉字符串,逗號分割

java語言中&#xff0c;list<String 轉成字符串&#xff0c;逗號分割 在 Java 中&#xff0c;將 List<String> 轉成逗號分割的字符串有多種方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一個靜態方法&#xff0c;它可以方便地將集合中的元素用…

NineData云原生智能數據管理平臺新功能發布|2025年8月版

本月發布 11 項更新&#xff0c;其中重點發布 5項、功能優化 6 項。重點發布數據庫 DevOps - SQL 窗口支持 PolarDB 系列SQL 窗口新增支持 PolarDB PostgreSQL 與 PolarDB Oracle 數據源&#xff0c;擴展云原生數據庫管理能力。新增 AWS 數據源支持新增支持 AWS Aurora Postgre…

【ARDUINO】通過ESP8266連接WIFI,啟動TCP,接受TCP客戶端指令【測試中】

通過ESP8266連接WIFI&#xff0c;啟動TCP&#xff0c;接受TCP客戶端指令**記錄**2025年9月8日11:20:372025年9月9日08:45:342025年9月11日21:40:22**代碼**記錄 2025年9月8日11:20:37 【測試情況】 代碼可以跑到正確連接WIFI&#xff0c;也能獲得IP&#xff0c;但是啟動TCP服…

(網絡原理)核心知識回顧 網絡核心原理 get和post的理解 解析http 加密+請求和響應的一些關鍵字 Cookie和session 對密鑰的理解

目錄 核心知識回顧 網絡核心原理 get和post的理解 解析http 加密請求和響應的一些關鍵字 Cookie和session 對密鑰的理解 核心知識回顧 網絡編程---socket api UDP DatagramSocket DatagramPacket TCP ServerSocket Socket 1.讀寫數據通過Socket,通過Socket內置的 lnpu…