Spring Cloud Alibaba基礎(chǔ)教程:Sentinel使用Apollo存儲(chǔ)規(guī)則

上一篇我們介紹了如何通過(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ī)則配置脚囊,目前包括以下幾種方式:

本文我們就來(lái)一起動(dòng)手嘗試一下龟糕,如何使用Apollo來(lái)存儲(chǔ)限流規(guī)則。

準(zhǔn)備工作

下面我們將同時(shí)使用到ApolloSentinel Dashboard悔耘,所以可以先把ApolloSentinel 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ò)展:

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-apollo</artifactId>
        <version>1.4.0</version>
    </dependency>
</dependencies>

第二步:在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)目名稱,這里采用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)系可見下圖所示:

image.png

第四步:創(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";
        }

    }

}

其中@EnableApolloConfig注解是開啟Apollo的配置加載功能浮禾。

第五步:Apollo中配置限流規(guī)則,具體可見第三步的截圖中的樣子份汗。其中盈电,key值的內(nèi)容是下面的json

[
    {
        "resource": "/hello",
        "limitApp": "default",
        "grade": 1,
        "count": 5,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

可以看到上面配置規(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í)鞭铆。

第六步:?jiǎn)?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

通過(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)容的客戶端代碼,示例讀者可以通過(guò)查看下面?zhèn)}庫(kù)中的alibaba-sentinel-datasource-apollo項(xiàng)目:

如果您對(duì)這些感興趣孙咪,歡迎star堪唐、follow、收藏该贾、轉(zhuǎn)發(fā)給予支持!

參考資料

下面是Sentinel的倉(cāng)庫(kù)地址與官方文檔捌臊,讀者也可以自己查閱文檔學(xué)習(xí):

系列回顧

專題推薦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杨蛋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子理澎,更是在濱河造成了極大的恐慌逞力,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糠爬,死亡現(xiàn)場(chǎng)離奇詭異寇荧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)执隧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門揩抡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人镀琉,你說(shuō)我怎么就攤上這事峦嗤。” “怎么了屋摔?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵烁设,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我钓试,道長(zhǎng)装黑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任弓熏,我火速辦了婚禮恋谭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挽鞠。我一直安慰自己箕别,他們只是感情好铜幽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著串稀,像睡著了一般除抛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上母截,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天到忽,我揣著相機(jī)與錄音,去河邊找鬼清寇。 笑死喘漏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的华烟。 我是一名探鬼主播翩迈,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盔夜!你這毒婦竟也來(lái)了负饲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喂链,失蹤者是張志新(化名)和其女友劉穎返十,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椭微,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洞坑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝇率。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迟杂。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖本慕,靈堂內(nèi)的尸體忽然破棺而出逢慌,到底是詐尸還是另有隱情,我是刑警寧澤间狂,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布攻泼,位于F島的核電站,受9級(jí)特大地震影響鉴象,放射性物質(zhì)發(fā)生泄漏忙菠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一纺弊、第九天 我趴在偏房一處隱蔽的房頂上張望牛欢。 院中可真熱鬧,春花似錦淆游、人聲如沸傍睹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拾稳。三九已至吮炕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間访得,已是汗流浹背龙亲。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悍抑,地道東北人鳄炉。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像搜骡,于是被迫代替她去往敵國(guó)和親拂盯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容