摘要:前面我們講解了整合,詳細(xì)請(qǐng)查看文章阿里支持啦目前來(lái)說(shuō),大部分公司線上的網(wǎng)關(guān)應(yīng)該是,所以今天我們就來(lái)看看如何在中整合。
前面我們講解了Sentinel整合Spring Cloud Gateway,詳細(xì)請(qǐng)查看文章:阿里Sentinel支持Spring Cloud Gateway啦
目前來(lái)說(shuō),大部分公司線上的網(wǎng)關(guān)應(yīng)該是Zuul,所以今天我們就來(lái)看看如何在Zuul中整合Sentinel。本來(lái)想基于Spring Cloud Alibaba來(lái)進(jìn)行整合講解,整合的時(shí)候發(fā)現(xiàn)目前還沒(méi)更新版本,依賴還是之前的版本,咱們就以最原生的方式進(jìn)行整合吧,等Spring Cloud Alibaba更新之后,Sentinel的整合只會(huì)變得更簡(jiǎn)單。
加入zuul-adapter依賴:
com.alibaba.csp sentinel-zuul-adapter 1.6.0
配置Sentinel提供的限流過(guò)濾器和限流規(guī)則:
@Configuration public class ZuulConfig { @Bean public ZuulFilter sentinelZuulPreFilter() { return new SentinelZuulPreFilter(); } @Bean public ZuulFilter sentinelZuulPostFilter() { return new SentinelZuulPostFilter(); } @Bean public ZuulFilter sentinelZuulErrorFilter() { return new SentinelZuulErrorFilter(); } @PostConstruct public void doInit() { // 注冊(cè) FallbackProvider ZuulBlockFallbackManager.registerProvider(new MyBlockFallbackProvider()); initGatewayRules(); } /** * 配置限流規(guī)則 */ private void initGatewayRules() { Setrules = new HashSet<>(); rules.add(new GatewayFlowRule("yinjihuan").setCount(1) // 限流閾值 .setIntervalSec(1) // 統(tǒng)計(jì)時(shí)間窗口,單位是秒,默認(rèn)是 1 秒 ); GatewayRuleManager.loadRules(rules); } }
SentinelZuulPreFilter
pre過(guò)濾器,在請(qǐng)求路由之前匹配routeId和api,進(jìn)行限流操作
SentinelZuulPostFilter
post過(guò)濾器,路由之后恢復(fù)資源
SentinelZuulErrorFilter
error過(guò)濾器,異常后的處理
最后再配置一個(gè)簡(jiǎn)單的路由,路由名稱(chēng)yinjihuan,跟上面規(guī)則中的名稱(chēng)一致:
zuul.routes.yinjihuan.path=/cxytiandi/** zuul.routes.yinjihuan.url=http://cxytiandi.com
觸發(fā)限流后會(huì)返回固定的提示:
{ "code":429, "message":"Sentinel block exception", "route":"yinjihuan" }
如果想修改提示內(nèi)容可以自己實(shí)現(xiàn)ZuulBlockFallbackProvider接口,框架默認(rèn)提供的實(shí)現(xiàn)是DefaultBlockFallbackProvider,源碼如下:
public class DefaultBlockFallbackProvider implements ZuulBlockFallbackProvider { @Override public String getRoute() { return "*"; } @Override public BlockResponse fallbackResponse(String route, Throwable cause) { if (cause instanceof BlockException) { return new BlockResponse(429, "Sentinel block exception", route); } else { return new BlockResponse(500, "System Error", route); } } }
用法其實(shí)跟Zuul中的FallbackProvider一致,但是FallbackProvider比較好的是返回的ClientHttpResponse,我們可以自定義響應(yīng)內(nèi)容。
Sentinel提供的ZuulBlockFallbackProvider接口中定義的返回對(duì)象是BlockResponse ,也就意味著限制了響應(yīng)的字段,BlockResponse中有code,message,route三個(gè)字段,如果我想返回status, msg這兩個(gè)字段目前我沒(méi)找到其它的方式,不知道后續(xù)會(huì)不會(huì)支持,其實(shí)最好的是也返回ClientHttpResponse,這樣就可以自定義響應(yīng)內(nèi)容了。
這邊有個(gè)小插曲,就是我們自定義fallbackResponse的時(shí)候如果用中文message的話,響應(yīng)內(nèi)容是亂碼,如下:
{ code: 429, message: "??????", route: "yinjihuan" }
我看了下SentinelZuulPreFilter中的代碼,如下:
這邊是構(gòu)造了BlockResponse,然后設(shè)置到ResponseBody中,但是沒(méi)有進(jìn)行編碼設(shè)置,我自己改了下源碼,加了一行代碼:
ctx.getResponse().setContentType("application/json; charset=utf-8");
加了上面的代碼后,中文就不會(huì)亂碼了,效果如下:
{ code: 429, message: "訪問(wèn)太頻繁啦", route: "yinjihuan" }
不說(shuō)了,我還是去提個(gè)issues吧: https://github.com/alibaba/Sentinel/issues/733
歡迎加入我的知識(shí)星球,一起交流技術(shù),免費(fèi)學(xué)習(xí)猿天地的課程(http://cxytiandi.com/course) PS:目前星球中正在星主的帶領(lǐng)下組隊(duì)學(xué)習(xí)Spring Cloud,等你哦!文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74485.html
摘要:在之后,也終于發(fā)布了最新的版本。該版本距離上一次發(fā)布,過(guò)去了整整個(gè)月下面就隨我一起看看,這個(gè)大家期待已久的版本都有哪些內(nèi)容值得我們關(guān)注。如果是用戶,同時(shí)也是阿里云這些產(chǎn)品的用戶,那么直接使用還是非常方便的。 在Nacos 1.0.0 Release之后,Spring Cloud Alibaba也終于發(fā)布了最新的版本。該版本距離上一次發(fā)布,過(guò)去了整整4個(gè)月!下面就隨我一起看看,這個(gè)大家期...
摘要:有沒(méi)有那么一個(gè)框架能夠把熔斷跟限流都給做了,以前沒(méi)有,但是現(xiàn)在有了,我這屬于自問(wèn)自答哈這個(gè)框架就是阿里最新開(kāi)源的。后來(lái)我才發(fā)現(xiàn)我錯(cuò)了,大錯(cuò)特錯(cuò),這是一個(gè)新的框架,潛力實(shí)力阿里開(kāi)源。 前言 在 Spring Cloud 體系中,熔斷降級(jí)我們會(huì)使用 Hystrix 框架,限流通常會(huì)在 Zuul 中進(jìn)行處理,Zuul 中沒(méi)有自帶限流的功能,我們可以自己做限流或者集成第三方開(kāi)源的限流框架。最新...
摘要:可簡(jiǎn)單地認(rèn)為它是的擴(kuò)展,負(fù)載均衡自然成為不可或缺的特性。是基于開(kāi)發(fā)的服務(wù)代理組件,在使用場(chǎng)景中,它與和整合,打造具備服務(wù)動(dòng)態(tài)更新和負(fù)載均衡能力的服務(wù)網(wǎng)關(guān)。類(lèi)似的特性在項(xiàng)目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負(fù)載均衡。 摘要: Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Fo...
摘要:而當(dāng)企業(yè)只是將系統(tǒng)與系統(tǒng)之間的調(diào)用使用的方式進(jìn)行訪問(wèn)時(shí)使用網(wǎng)關(guān)對(duì)調(diào)用進(jìn)行管理,那么網(wǎng)關(guān)起到的就是服務(wù)治理的作用。另外很多企業(yè)因?yàn)樽陨硇畔踩脑颍荒苁褂猛饩W(wǎng)公有網(wǎng)的網(wǎng)關(guān)服務(wù),這樣就只有選擇私有云的方案了。 showImg(https://segmentfault.com/img/bVbsVBA?w=255&h=255); 前言 「 API網(wǎng)關(guān) 」是任何微服務(wù)架構(gòu)的重要組成部分。有了...
摘要:今天整理了一下近大半年以來(lái)的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫(xiě)過(guò)了,這個(gè)記錄的過(guò)程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 今天整理了一下近大半年以來(lái)的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫(xiě)過(guò)了,這個(gè)記錄的過(guò)程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
閱讀 2428·2021-11-23 09:51
閱讀 2457·2021-11-11 17:21
閱讀 3097·2021-09-04 16:45
閱讀 2380·2021-08-09 13:42
閱讀 2218·2019-08-29 18:39
閱讀 2879·2019-08-29 14:12
閱讀 1279·2019-08-29 13:49
閱讀 3363·2019-08-29 11:17