摘要:上一篇我們介紹了如何通過(guò)的配置功能來(lái)存儲(chǔ)限流規(guī)則。第六步啟動(dòng)應(yīng)用。深入思考在使用存儲(chǔ)規(guī)則配置的時(shí)候與存儲(chǔ)一樣,對(duì)于控制臺(tái)這些數(shù)據(jù)是只讀的,也就是說(shuō)控制臺(tái)中修改規(guī)則僅存在于服務(wù)的內(nèi)存中,不會(huì)修改中的配置值,重啟后恢復(fù)原來(lái)的值。
上一篇我們介紹了如何通過(guò)Nacos的配置功能來(lái)存儲(chǔ)限流規(guī)則。Apollo是國(guó)內(nèi)用戶(hù)非常多的配置中心,所以,今天我們繼續(xù)說(shuō)說(shuō)Spring Cloud Alibaba Sentinel中如何將流控規(guī)則存儲(chǔ)在Apollo中。
使用Apollo存儲(chǔ)限流規(guī)則Sentinel自身就支持了多種不同的數(shù)據(jù)源來(lái)持久化規(guī)則配置,目前包括以下幾種方式:
文件配置
Nacos配置
ZooKeeper配置
Apollo配置
本文我們就來(lái)一起動(dòng)手嘗試一下,如何使用Apollo來(lái)存儲(chǔ)限流規(guī)則。
準(zhǔn)備工作下面我們將同時(shí)使用到Apollo和Sentinel Dashboard,所以可以先把Apollo和Sentinel Dashboard啟動(dòng)起來(lái)。
如果還沒(méi)入門(mén)Sentinel Dashboard可以通過(guò)文末的系列目錄先學(xué)習(xí)之前的內(nèi)容。Apollo的話相對(duì)復(fù)雜一些,這里不做詳細(xì)介紹了,如果還沒(méi)有接觸過(guò)Apollo的讀者可以查看其官方文檔進(jìn)一步學(xué)習(xí)。
應(yīng)用配置第一步:在Spring Cloud應(yīng)用的pom.xml中引入Spring Cloud Alibaba的Sentinel模塊和Apollo存儲(chǔ)擴(kuò)展:
org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-alibaba-sentinel com.alibaba.csp sentinel-datasource-apollo 1.4.0
第二步:在Spring Cloud應(yīng)用中配置的服務(wù)信息,在resource目錄下,創(chuàng)建apollo-env.properties文件,內(nèi)容樣例:
local.meta=http://192.168.0.201:8080 dev.meta=http://192.168.0.202:8080
這里需要了解Apollo對(duì)多環(huán)境的配置,這里設(shè)置的是每個(gè)環(huán)境不同的配置服務(wù)地址,讀者需要根據(jù)自己的實(shí)際情況修改。
第三步:在Spring Cloud應(yīng)用中添加配置信息:
spring.application.name=sentinel-datasource-apollo server.port=8002 # apollo config app.id=${spring.application.name} # sentinel dashboard spring.cloud.sentinel.transport.dashboard=localhost:8080 # sentinel datasource apollo spring.cloud.sentinel.datasource.ds.apollo.namespaceName=application spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey=sentinel.flowRules
app.id:Apollo中的創(chuàng)建的項(xiàng)目名稱(chēng),這里采用spring.application.name參數(shù)的引用,從而達(dá)到服務(wù)名與配置項(xiàng)目名一致的效果
spring.cloud.sentinel.transport.dashboard:sentinel dashboard的訪問(wèn)地址,根據(jù)上面準(zhǔn)備工作中啟動(dòng)的實(shí)例配置
spring.cloud.sentinel.datasource.ds.apollo.namespaceName:Apollo的空間名
spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey:配置規(guī)則的key名稱(chēng)
關(guān)于Apollo相關(guān)配置的對(duì)應(yīng)關(guān)系可見(jiàn)下圖所示:
第四步:創(chuàng)建應(yīng)用主類(lèi),并提供一個(gè)rest接口,比如:
@EnableApolloConfig @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Slf4j @RestController static class TestController { @GetMapping("/hello") public String hello() { return "didispace.com"; } } }
其中@EnableApolloConfig注解是開(kāi)啟Apollo的配置加載功能。
第五步:Apollo中配置限流規(guī)則,具體可見(jiàn)第三步的截圖中的樣子。其中,key值的內(nèi)容是下面的json
[ { "resource": "/hello", "limitApp": "default", "grade": 1, "count": 5, "strategy": 0, "controlBehavior": 0, "clusterMode": false } ]
可以看到上面配置規(guī)則是一個(gè)數(shù)組類(lèi)型,數(shù)組中的每個(gè)對(duì)象是針對(duì)每一個(gè)保護(hù)資源的配置對(duì)象,每個(gè)對(duì)象中的屬性解釋如下:
resource:資源名,即限流規(guī)則的作用對(duì)象
limitApp:流控針對(duì)的調(diào)用來(lái)源,若為 default 則不區(qū)分調(diào)用來(lái)源
grade:限流閾值類(lèi)型(QPS 或并發(fā)線程數(shù));0代表根據(jù)并發(fā)數(shù)量來(lái)限流,1代表根據(jù)QPS來(lái)進(jìn)行流量控制
count:限流閾值
strategy:調(diào)用關(guān)系限流策略
controlBehavior:流量控制效果(直接拒絕、Warm Up、勻速排隊(duì))
clusterMode:是否為集群模式
這里我們只做簡(jiǎn)單的配置解釋?zhuān)员阌诶斫膺@里的配置作用。實(shí)際上這里還有非常多可配置選項(xiàng)和規(guī)則,更復(fù)雜的配置后面我們多帶帶開(kāi)一篇來(lái)深入學(xué)習(xí)。
第六步:?jiǎn)?dòng)應(yīng)用。如果一些順利,可以看到類(lèi)似下面的日志,代表已經(jīng)成功從Nacos加載了一條限流規(guī)則:
2019-04-18 23:56:11.278 INFO 29149 --- [ main] o.s.c.a.s.c.SentinelDataSourceHandler : [Sentinel Starter] DataSource ds-sentinel-apollo-datasource start to loadConfig 2019-04-18 23:56:11.279 INFO 29149 --- [ main] o.s.c.a.s.c.SentinelDataSourceHandler : [Sentinel Starter] DataSource ds-sentinel-apollo-datasource load 1 FlowRule
通過(guò)postman或者curl訪問(wèn)幾下localhost:8002/hello接口:
$ curl localhost:8002/hello didispace.com
此時(shí),在Sentinel Dashboard中就可以看到當(dāng)前我們啟動(dòng)的sentinel-datasource-apollo服務(wù)。點(diǎn)擊左側(cè)菜單中的流控規(guī)則,可以看到已經(jīng)存在一條記錄了,這條記錄就是上面我們?cè)贏pollo中配置的限流規(guī)則。
深入思考在使用Apollo存儲(chǔ)規(guī)則配置的時(shí)候與Nacos存儲(chǔ)一樣,對(duì)于Sentinel控制臺(tái)這些數(shù)據(jù)是只讀的,也就是說(shuō):
Sentinel控制臺(tái)中修改規(guī)則:僅存在于服務(wù)的內(nèi)存中,不會(huì)修改Apollo中的配置值,重啟后恢復(fù)原來(lái)的值。
Nacos控制臺(tái)中修改規(guī)則:服務(wù)的內(nèi)存中規(guī)則會(huì)更新,Apollo中持久化規(guī)則也會(huì)更新,重啟后依然保持。
代碼示例本文介紹內(nèi)容的客戶(hù)端代碼,示例讀者可以通過(guò)查看下面?zhèn)}庫(kù)中的alibaba-sentinel-datasource-apollo項(xiàng)目:
Github:https://github.com/dyc87112/SpringCloud-Learning/
Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您對(duì)這些感興趣,歡迎star、follow、收藏、轉(zhuǎn)發(fā)給予支持!
參考資料下面是Sentinel的倉(cāng)庫(kù)地址與官方文檔,讀者也可以自己查閱文檔學(xué)習(xí):
Github
Sentinel官方文檔:動(dòng)態(tài)規(guī)則
Spring Cloud Alibaba Sentinel文檔
專(zhuān)題整理Spring Boot基礎(chǔ)教程
Spring Cloud基礎(chǔ)教程
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74229.html
摘要:在之前的兩篇教程中我們分別介紹了如何將的限流規(guī)則存儲(chǔ)到和中。本文以存儲(chǔ)為例,下一篇介紹的改在示例。但是由于考慮到與的結(jié)合使用,略作修改。 在之前的兩篇教程中我們分別介紹了如何將Sentinel的限流規(guī)則存儲(chǔ)到Nacos和Apollo中。同時(shí),在文末的思考中,我都指出了這兩套整合方案都存在一個(gè)不足之處:不論采用什么配置中心,限流規(guī)則都只能通過(guò)Nacos界面或Apollo界面來(lái)完成修改才能...
摘要:下面通過(guò)這篇,詳細(xì)介紹當(dāng)使用作為配置中心之后,如何實(shí)現(xiàn)中修改規(guī)則同步到。關(guān)于下面改造的原理和分析可以見(jiàn)上一篇中修改規(guī)則同步到的頭兩節(jié)內(nèi)容,這里不重復(fù)介紹了。但是由于考慮到與的結(jié)合使用,略作修改。主要就是中存儲(chǔ)配置的和不要弄錯(cuò)。 上一篇我們介紹了如何通過(guò)改造Sentinel Dashboard來(lái)實(shí)現(xiàn)修改規(guī)則之后自動(dòng)同步到Apollo。下面通過(guò)這篇,詳細(xì)介紹當(dāng)使用Nacos作為配置中心之后...
摘要:所以,在整合了做規(guī)則存儲(chǔ)之后,需要知道在下面兩個(gè)地方修改存在不同的效果控制臺(tái)中修改規(guī)則僅存在于服務(wù)的內(nèi)存中,不會(huì)修改中的配置值,重啟后恢復(fù)原來(lái)的值。控制臺(tái)中修改規(guī)則服務(wù)的內(nèi)存中規(guī)則會(huì)更新,中持久化規(guī)則也會(huì)更新,重啟后依然保持。 通過(guò)上一篇《使用Sentinel實(shí)現(xiàn)接口限流》的介紹,相信大家對(duì)Sentinel已經(jīng)有了初步的認(rèn)識(shí)。在Spring Cloud Alibaba的整合封裝之下,接...
摘要:下面通過(guò)這篇,詳細(xì)介紹當(dāng)使用作為配置中心之后,如何實(shí)現(xiàn)中修改規(guī)則同步到。關(guān)于下面改造的原理和分析可以見(jiàn)上一篇中修改規(guī)則同步到的頭兩節(jié)內(nèi)容,這里不重復(fù)介紹了。方法中的參數(shù)是中的服務(wù)名稱(chēng)。這里的大部分內(nèi)容與上一步中的實(shí)現(xiàn)一致。上一篇我們介紹了如何通過(guò)改造Sentinel Dashboard來(lái)實(shí)現(xiàn)修改規(guī)則之后自動(dòng)同步到Apollo。下面通過(guò)這篇,詳細(xì)介紹當(dāng)使用Nacos作為配置中心之后,如何實(shí)現(xiàn)S...
摘要:之前開(kāi)放過(guò)一臺(tái)公益給大家,以方便大家在閱讀我博客中教程時(shí)候做實(shí)驗(yàn)。由于目前在連載,所以對(duì)應(yīng)的也部署了一臺(tái),并且也開(kāi)放出來(lái),給大家學(xué)習(xí)測(cè)試之用。 之前開(kāi)放過(guò)一臺(tái)公益Eureka Server給大家,以方便大家在閱讀我博客中教程時(shí)候做實(shí)驗(yàn)。由于目前在連載Spring Cloud Alibaba,所以對(duì)應(yīng)的也部署了一臺(tái)Nacos,并且也開(kāi)放出來(lái),給大家學(xué)習(xí)測(cè)試之用。 Nacos控制臺(tái) ...
閱讀 3774·2021-11-11 11:02
閱讀 3505·2021-10-11 10:57
閱讀 3616·2021-09-22 16:00
閱讀 1853·2021-09-02 15:15
閱讀 1337·2019-08-30 15:56
閱讀 1016·2019-08-30 15:54
閱讀 2738·2019-08-30 12:43
閱讀 3547·2019-08-29 16:06