成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Spring Cloud Alibaba 本地調試介紹及方案設計

瀏覽:5日期:2023-07-03 13:38:53
目錄1 本地調試介紹2 框架環境3 方案設計4 實現要點5. 總結附:工具方法1 本地調試介紹

本地調試: 這里是指在開發環境中,部署了一整套的某個項目或者產品的服務,開發人員開發時,本地會起一個或多個服務,這些服務和開發環境中部署的服務是相同的,這種情況下,一個服務就會有多個實例,大多數微服務中的默認負載均衡策略都是輪詢,這些實例會輪流被調用。

為了方便 本地調試,需要提供一種策略,可以指定在負載均衡時,選擇哪個實例進行調用。在使用 Nacos 作為注冊中心時,可以通過 上線和下線 的方式來選擇使用哪個實例,但是這種方式只能強制調用某個實例,如果開發環境還有其他人在調試,自己程序 設置斷點 時會阻塞所有調用,非常不利于多人調試的協調。

為了解決 本地調試 的問題,本文實現了一種簡單實用的策略,可以通過 Nacos 動態配置服務路由,還可以基于用戶,部門,組織等級別配置服務路由,實現 本地調試 的同時,實際上也實現 灰度發布

2 框架環境

本文基于 Spring Cloud Alibaba 框架,和 Spring Cloud 相比增加了一部分針對 Dubbo 的方案,因此本文適合以下框架參考:

Spring Cloud Alibaba Spring Cloud

Spring Cloud GatewaySpring Cloud Ribbon

Dubbo

下圖是 Spring Cloud Alibaba 框架中,一次方法調用的可能情況,Ailbaba 這部分多的是圖中 ServiceA -> ServiceB 部分使用 Dubbo 協議。Spring Cloud 框架中,用的是 ServiceA -> ServiceC 這種 Feign(HTTP) 方式。

Spring Cloud Alibaba 本地調試介紹及方案設計

圖中的所有過濾器和攔截器,雖然名稱不同,但是作用相同。這部分的主要作用就是 獲取或傳遞路由規則,例如,可以實現基于 HTTP Header 設置路由規則的配置,可以基于 HTTP 和 token 實現基于用戶的路由規則配置,這部分的實現和需求有關,沒有統一的實現。

3 方案設計

這里以這兩種場景簡單舉個例子。

3.1 基于 HTTP Header 的本地調試方案

在這個方案中,按照上面的流程圖敘述一遍。

用戶調用服務前,在 Header 中設置調用規則,比如增加 service-route 請求頭,請求頭的內容為 servicea:10.10.10.130;serviceb:10.10.10.100;servicec:10.10.10.0/24,在請求頭中指明需要控制路由的服務信息(不需要控制的直接省略走默認)。 通過 Spring Cloud Gateway 的 GlobalFilter 實現提取請求頭信息,將配置信息記錄下來(如 ThreadLocal) 負載均衡時,根據這里的配置選擇優先路由的服務,調用 ServiceA 時,仍然是 HTTP 請求,請求頭會傳遞過去。 攔截器獲取請求頭中的路由規則,這一步和 1 類似,但是屬于 Spring MVC 的攔截器,獲取路由規則后記錄下來(如 ThreadLocal) ServiceA 調用 ServiceB 是 Dubbo 協議的路徑,和 7,8 Feign 方式沒有先后順序,是兩個分支。 在 4 這一步通過 Dubbo 的 Consumer Filter 過濾器和 RpcContext 將路由信息記錄到 attachment 中,這樣可以把路由配置傳遞到 ServiceB,如果 ServiceB 還需要調用其他服務,路由仍然會起到作用。 在 Dubbo 的 Router 實現中,根據路由信息選擇優先調用的服務,然后進行調用。 Dubbo 的 Provider Filter 從 RpcContext 獲取路由配置,記錄下來(如 ThreadLocal),如果后續調用其他服務,邏輯和 4,5,6一樣。在 6 這一步的 Provider Filter 結束調用的時候,注意清空路由信息(如 ThreadLocal.clear()),避免對其他調用產生污染。 這一步和4,5,6沒有順序關系,是純 Spring Cloud 方式的調用,在 ServiceA 調用時,通過自定義 Ribbon 中的 IRule 實現基于自己路由規則的調用。 在最終調用 ServiceC 之前,通過 Feign 的 RequestInterceptor 攔截器添加 service-route 頭,將服務路由傳遞下去。 和第3步相同,通過 Spring MVC 攔截器獲取服務路由記錄下來。后續在調用其他服務時,Dubbo服務走4,5,6,Feign方式走7,8,9。

3.2 基于操作用戶的本地調試方案

基于操作用戶的方案中,和上面類似,但是不需要在每次請求的時候設置 HTTP Header,但是需要一種方式存取服務路由的配置。

這里以使用 Nacos 配置管理實現服務路由配置的存取。

根據自己使用的用戶在 Nacos 配置服務路由,配置名規則如 服務名.user-routes,使用 Spring Cloud Alibaba 的默認組 dubbo,用戶服務路由的配置規則可以自己定義,這里舉個簡單例子:

enabled: true # 啟用,停用ip: 10.10.0.0/24 # 默認優先IP或網段,所有IP都支持具體IP和網段userIps: # Map<Long, String>,優先級最高,針對用戶配置 IP 優先 # userId: IP 1: 10.10.0.100 2: 10.10.0.101# 這部分定義根據自己需要設計 deptIps: # 針對部門配置 # deptId: IP 1: 10.10.0.0/24orgIps: # 針對組織配置 # orgId: IP 1: 10.10.10.0/24

Spring Cloud Gateway 的 GlobalFilter 根據請求 token 獲取 用戶信息,記錄用戶信息(如 ThreadLocal)。

負載均衡時,使用 Nacos ConfigService,根據 服務名.user-routes 查詢配置信息,同時監聽該配置信息,根據這里的配置選擇優先路由的服務。 攔截器根據請求 token 獲取 用戶信息,記錄用戶信息(如 ThreadLocal)。 ServiceA 調用 ServiceB 是 Dubbo 協議的路徑,和 7,8 Feign 方式沒有先后順序,是兩個分支。 在 4 這一步通過 Dubbo 的 Consumer Filter 過濾器和 RpcContext 將用戶信息記錄到 attachment 中,這樣可以把用戶信息傳遞到 ServiceB,如果 ServiceB 還需要調用其他服務,用戶信息仍然會起到作用。 在 Dubbo 的 Router 實現中,根據路由信息選擇優先調用的服務,然后進行調用。 Dubbo 的 Provider Filter 從 RpcContext 獲取用戶信息,記錄下來(如 ThreadLocal),如果后續調用其他服務,邏輯和 4,5,6一樣。在 6 這一步的 Provider Filter 結束調用的時候,注意清空用戶信息(如 ThreadLocal.clear()),避免對其他調用產生污染。 這一步和4,5,6沒有順序關系,是純 Spring Cloud 方式的調用,在 ServiceA 調用時,通過自定義 Ribbon 中的 IRule 實現基于自己路由規則的調用。 在最終調用 ServiceC 之前,通過 Feign 的 RequestInterceptor 攔截器設置token或用戶信息,將操作用戶傳遞下去。 和第3步相同,通過 Spring MVC 攔截器獲取用戶信息記錄下來。后續在調用其他服務時,Dubbo服務走4,5,6,Feign方式走7,8,9。

本文選擇第 2 種方案,針對 1~9 步,分別講解需要實現的接口和接口應用(生效)的配置。

4 實現要點

上面提到的 ThreadLocal,實現時使用一個 static 變量存儲,提供相應的存取清空的靜態方法,方便跨接口的 用戶信息 傳遞。

4.1 Spring Cloud Gateway 全局過濾器

假設有一個 UserGlobalFilter,該過濾器根據 token 獲取并緩存用戶信息,在請求完成后需要清空緩存的用戶信息。

Spring Cloud Gateway 中的過濾器,直接在 @Configuration 的配置類中用 @Bean 提供即可。

4.2 Ribbon 負載均衡

實現 ribbon-loadbalancer 中的 com.netflix.loadbalancer.IRule 接口,將來調用具體服務時通過 choose 接口返回符合條件的實例。

實現這個接口之后,需要特殊的方式注冊該接口,在啟動類增加注解 @RibbonClients(defaultConfiguration = UserRuleConfiguration.class),注解中指定了一個配置類,這個類一定不要添加 @Configuration 注解!!!

在這個類中,通過 @Bean 注解返回一個 IRule 接口的實現。

在 Ribbon 中,會創建一個新的 ApplicationContext 來初始化這些配置,在這個新的 ApplicationContext 中,配置的 IRule 實現會被使用。

4.3 Spring MVC 攔截器

實現 HandlerInterceptor 攔截器,從請求獲取用戶信息并記錄下來。

攔截器想要生效,需要提供一個配置類,繼承 WebMvcConfigurer 接口,實現 addInterceptors 方法,在這個方法實現中添加攔截器的實現類。

4.4 Dubbo Consumer Filter 過濾器

實現Dubbo 的Filter接口,通過 RpcContext 傳遞前面記錄的用戶信息。

可以在實現類添加 @Activate 注解,指定 group 為 CommonConstants.CONSUMER。

按照 dubbo SPI 要求,添加 META-INF/dubbo/org.apache.dubbo.rpc.Filter 文件,寫上實現類。

4.5 Dubbo Router 路由

這一步實際上可以放在 Dubbo 負載均衡實現,也可以用 Router 實現。

使用 Router 時,需要同時使用 RouterFactory 和 Router 接口,然后配置 RouterFactory 的 SPI 配置文件。

在 Router 的 route 方法中根據規則返回合適的 Invoker。

4.6 Dubbo Provider Filter 過濾器

實現Dubbo 的Filter接口,通過 RpcContext 獲取傳遞過來的用戶信息。

可以在實現類添加 @Activate 注解,指定 group 為 CommonConstants.PROVIDER。

按照 dubbo SPI 要求,添加 META-INF/dubbo/org.apache.dubbo.rpc.Filter 文件,寫上實現類。

這個實現類可以和 4.4 的放一個 Filter 實現中,需要自己區分當前是 consumer 還是 provider 實現不同的邏輯。

4.7 Ribbon 負載均衡,同 4.2

這一步的實現和 4.2 一樣,4.2 是用在 Spring Cloud Gateway 中,這里是配置到具體的服務中。配置方式一樣。

4.8 Feign RequestInterceptor 攔截器

首先實現 RequestInterceptor 接口,在實現中往 requst 的 Header 中放置要傳遞的數據。

接口想要生效,需要和 Ribbon 類似的配置。

在 @EnableFeignClients 的注解中,通過 defaultConfiguration 設置一個 Feign 的配置類。在這個配置中通過 @Bean 提供 RequestInterceptor 接口的實現。

4.9 Spring MVC 攔截器,同 4.3

4.3 中是網關調用服務,4.9是服務通過 Feign (或resttemplate)調用服務,對被調用的服務來說都是 HTTP 請求,因此都會執行 Spring MVC 的攔截器,所以這里的實現是一樣的。

5. 總結

本文提供了本地調試的方案和主要的實現要點,可以根據文中的關鍵指引和自己的實際需求實現自己的方案。關于本地調試如果有更好的方案,歡迎留言討論。

附:工具方法

判斷IP是否相等或輸入子網IP的方法:

public static boolean ipInRange(String ip, String cidr) {if(cidr.indexOf(’/’) < 0) {return ip.equals(cidr);}int ipAddr = ipToInt(ip);int type = Integer.parseInt(cidr.replaceAll('.*/', ''));String cidrIp = cidr.replaceAll('/.*', '');if(type == 32){return ip.equals(cidrIp);}int cidrIpAddr = ipToInt(cidrIp);int mask = 0xFFFFFFFF << (32 - type);return (ipAddr & mask) == (cidrIpAddr & mask);}public static int ipToInt(String ip) {String[] ips = ip.split('.');return (Integer.parseInt(ips[0] << 24) |Integer.parseInt(ips[1] << 16) |Integer.parseInt(ips[2] << 8) |Integer.parseInt(ips[3]));}

到此這篇關于Spring Cloud Alibaba 本地調試方案的文章就介紹到這了,更多相關Spring Cloud Alibaba 本地調試內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品免费一区二区三区在线观看 | 国产成人综合在线观看| 欧美va天堂| 欧美一级黄色大片| 精品一区二区免费看| 欧美视频三区在线播放| 天涯成人国产亚洲精品一区av| 国产婷婷精品| 亚洲自拍与偷拍| 亚洲国产国产亚洲一二三| 久久精品人人做人人爽97| 成人av在线网| 日韩欧美高清一区| 国产suv一区二区三区88区| 3d动漫精品啪啪一区二区竹菊| 美女脱光内衣内裤视频久久网站 | 91视频国产资源| 久久久久国产精品免费免费搜索| 国产成人午夜片在线观看高清观看| 欧美久久一二三四区| 国产裸体歌舞团一区二区| 欧美电影影音先锋| 国产一区二区三区av电影| 欧美日韩国产中文| 狠狠色伊人亚洲综合成人| 4438x亚洲最大成人网| 国产成人夜色高潮福利影视| 欧美一区二区三区视频免费播放 | 国产美女视频91| 91精品国产色综合久久不卡电影| 国产91精品在线观看| 精品女同一区二区| 91香蕉视频在线| 色吧成人激情小说| 激情丁香综合五月| 日韩西西人体444www| 国产成a人亚洲精品| 日韩欧美中文字幕一区| bt欧美亚洲午夜电影天堂| 久久久亚洲综合| 欧美午夜一区| 一个色在线综合| 久久久久中文| 国产一区免费电影| 久久综合视频网| 黄色亚洲大片免费在线观看| 亚洲免费观看高清完整版在线观看熊 | 久久久国产一区二区三区四区小说 | 久久精品人人做人人爽人人| 在线观看成人av| 亚洲线精品一区二区三区八戒| 久久婷婷丁香| 国产福利精品一区二区| 久久精品人人做人人综合| 一区二区三区四区国产| 免费在线观看不卡| 日韩久久久久久| 黄色日韩在线| 五月天国产精品| 欧美精品 国产精品| av一区二区三区在线| 亚洲免费在线观看视频| 欧美色手机在线观看| 99久久精品国产精品久久| 亚洲三级电影网站| 在线欧美小视频| av动漫一区二区| 亚洲精品乱码久久久久久久久| 色诱视频网站一区| 国产精品1区2区3区| 欧美极品xxx| 99pao成人国产永久免费视频| 日本午夜精品一区二区三区电影| 欧美一级理论片| 在线观看91精品国产入口| 99久久精品一区| 亚洲国产人成综合网站| 欧美日韩国产综合一区二区三区| 欧美一区二区三区免费看| 亚洲大片免费看| 欧美成人三级在线| 亚洲深爱激情| 国产99一区视频免费 | 国产美女一区二区| 亚洲欧美综合色| 欧美久久久久久久久中文字幕| 国产精品第十页| 免费看欧美女人艹b| 久久蜜桃av一区二区天堂| 国产精品影视在线观看| 最新不卡av在线| 欧美日韩成人一区| 亚洲高清电影| 日产国产欧美视频一区精品| 2020国产精品久久精品美国| 香蕉视频成人在线观看| 成人性生交大片免费看在线播放 | 亚洲色图视频免费播放| 制服丝袜在线91| av成人黄色| 国产精品乡下勾搭老头1| 亚洲卡通动漫在线| 亚洲人成网站色在线观看| 欧美一卡在线观看| 亚洲自拍高清| 欧美搞黄网站| 国产在线一区二区| 亚洲成人综合网站| 国产片一区二区| 欧美日韩亚洲综合一区| 亚洲欧洲日韩综合二区| 成人国产亚洲欧美成人综合网 | 国产欧美日本一区二区三区| 色哟哟日韩精品| 伊人久久亚洲热| 国产精品亚洲专一区二区三区| 亚洲国产精品一区二区尤物区| 久久精品综合网| 在线不卡的av| 久久青草久久| 亚洲精品极品| 日韩三级免费观看| 色88888久久久久久影院野外| 欧美视频成人| 国产不卡视频一区| 日本aⅴ免费视频一区二区三区| 国产精品久久久久久亚洲伦| 欧美一区二区久久| 久久久久久久欧美精品| 影音先锋久久| 99精品久久99久久久久| 久久精品理论片| 亚洲综合区在线| 国产精品免费看片| 精品区一区二区| 91 com成人网| 久久中文字幕一区二区三区| 一区二区国产精品| 欧美日韩在线一二三| 成人h精品动漫一区二区三区| 九九久久精品视频| 日韩在线一区二区| 一卡二卡欧美日韩| 国产精品色哟哟网站| 26uuu亚洲| 欧美一卡2卡3卡4卡| 欧美午夜不卡视频| 久久本道综合色狠狠五月| 国产综合婷婷| 91丨九色丨国产丨porny| 福利电影一区二区| 99v久久综合狠狠综合久久| 国产乱人伦精品一区二区在线观看| 日韩中文字幕区一区有砖一区| 亚洲最色的网站| 亚洲免费观看高清在线观看| 国产精品久久久久久久第一福利| 26uuu成人网一区二区三区| 555www色欧美视频| 欧美美女一区二区三区| 在线欧美小视频| 久久免费高清| 色成人在线视频| 色中色一区二区| 一本大道久久a久久综合| 久久久综合网| 久久国产精品高清| 老鸭窝91久久精品色噜噜导演| 国产精品久久久久久久久久妞妞| 亚洲午夜精品久久| 国产精品大全| 极品裸体白嫩激情啪啪国产精品| 激情91久久| 极品少妇一区二区三区| 亚洲午夜在线| 亚洲国产精品一区| 亚洲美女黄色| 国产一区成人| 麻豆91精品| 日本精品一级二级| 欧美日韩一二三区| 日韩你懂的电影在线观看| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲成av人片观看| 日韩福利视频网| 久久国产精品99精品国产| 久久精品国产99| 国产一区二区精品在线观看| 国产精品1024久久| av在线这里只有精品| 国内精品久久久久国产盗摄免费观看完整版| 欧美成熟视频| 亚洲成人自拍视频| 麻豆精品91| 欧美亚州韩日在线看免费版国语版| 欧美日韩视频在线观看一区二区三区| 在线不卡欧美精品一区二区三区| 精品国产区一区| 欧美激情综合网| 一区av在线播放|