javascript
apollo持久化sentinel_Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
上一篇我們介紹了如何通過(guò)Nacos的配置功能來(lái)存儲(chǔ)限流規(guī)則。Apollo是國(guó)內(nèi)用戶非常多的配置中心,所以,今天我們繼續(xù)說(shuō)說(shuō)Spring Cloud Alibaba Sentinel中如何將流控規(guī)則存儲(chǔ)在Apollo中。
使用Apollo存儲(chǔ)限流規(guī)則
Sentinel自身就支持了多種不同的數(shù)據(jù)源來(lái)持久化規(guī)則配置,目前包括以下幾種方式:
文件配置
ZooKeeper配置
本文我們就來(lái)一起動(dòng)手嘗試一下,如何使用Apollo來(lái)存儲(chǔ)限流規(guī)則。
準(zhǔn)備工作
下面我們將同時(shí)使用到Apollo和Sentinel Dashboard,所以可以先把Apollo和Sentinel Dashboard啟動(dòng)起來(lái)。
如果還沒(méi)入門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
復(fù)制代碼
第二步:在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
復(fù)制代碼
這里需要了解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
復(fù)制代碼app.id:Apollo中的創(chuàng)建的項(xià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名稱
關(guān)于Apollo相關(guān)配置的對(duì)應(yīng)關(guān)系可見下圖所示:
第四步:創(chuàng)建應(yīng)用主類,并提供一個(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";
}
}
}
復(fù)制代碼
其中@EnableApolloConfig注解是開啟Apollo的配置加載功能。
第五步:Apollo中配置限流規(guī)則,具體可見第三步的截圖中的樣子。其中,key值的內(nèi)容是下面的json
[
{
"resource": "/hello",
"limitApp": "default",
"grade": 1,
"count": 5,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
復(fù)制代碼
可以看到上面配置規(guī)則是一個(gè)數(shù)組類型,數(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:限流閾值類型(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)單的配置解釋,以便于理解這里的配置作用。實(shí)際上這里還有非常多可配置選項(xiàng)和規(guī)則,更復(fù)雜的配置后面我們單獨(dú)開一篇來(lái)深入學(xué)習(xí)。
第六步:啟動(dòng)應(yīng)用。如果一些順利,可以看到類似下面的日志,代表已經(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
復(fù)制代碼
通過(guò)postman或者curl訪問(wèn)幾下localhost:8002/hello接口:
$ curl localhost:8002/hello
didispace.com
復(fù)制代碼
此時(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)容的客戶端代碼,示例讀者可以通過(guò)查看下面?zhèn)}庫(kù)中的alibaba-sentinel-datasource-apollo項(xiàng)目:
如果您對(duì)這些感興趣,歡迎star、follow、收藏、轉(zhuǎn)發(fā)給予支持!
參考資料
下面是Sentinel的倉(cāng)庫(kù)地址與官方文檔,讀者也可以自己查閱文檔學(xué)習(xí):
系列回顧
專題推薦
總結(jié)
以上是生活随笔為你收集整理的apollo持久化sentinel_Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux下分析prn文件,Linux文
- 下一篇: SiteMapCreator 发布 (O