上一篇咱們介紹瞭如何經過Nacos的配置功能來存儲限流規則。Apollo是國內用戶很是多的配置中心,因此,今天咱們繼續說說Spring Cloud Alibaba Sentinel中如何將流控規則存儲在Apollo中。java
Sentinel自身就支持了多種不一樣的數據源來持久化規則配置,目前包括如下幾種方式:git
本文咱們就來一塊兒動手嘗試一下,如何使用Apollo來存儲限流規則。github
下面咱們將同時使用到Apollo
和Sentinel Dashboard
,因此能夠先把Apollo
和Sentinel Dashboard
啓動起來。web
若是還沒入門Sentinel Dashboard
能夠經過文末的系列目錄先學習以前的內容。Apollo的話相對複雜一些,這裏不作詳細介紹了,若是尚未接觸過Apollo的讀者能夠查看其官方文檔進一步學習。spring
第一步:在Spring Cloud應用的pom.xml
中引入Spring Cloud Alibaba的Sentinel模塊和Apollo存儲擴展:json
<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應用中配置的服務信息,在resource
目錄下,建立apollo-env.properties
文件,內容樣例:數組
local.meta=http://192.168.0.201:8080 dev.meta=http://192.168.0.202:8080
這裏須要瞭解Apollo對多環境的配置,這裏設置的是每一個環境不一樣的配置服務地址,讀者須要根據本身的實際狀況修改。bash
第三步:在Spring Cloud應用中添加配置信息:併發
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中的建立的項目名稱,這裏採用spring.application.name
參數的引用,從而達到服務名與配置項目名一致的效果spring.cloud.sentinel.transport.dashboard
:sentinel dashboard的訪問地址,根據上面準備工做中啓動的實例配置spring.cloud.sentinel.datasource.ds.apollo.namespaceName
:Apollo的空間名spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey
:配置規則的key名稱關於Apollo相關配置的對應關係可見下圖所示:app
第四步:建立應用主類,並提供一個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中配置限流規則,具體可見第三步的截圖中的樣子。其中,key值的內容是下面的json
[ { "resource": "/hello", "limitApp": "default", "grade": 1, "count": 5, "strategy": 0, "controlBehavior": 0, "clusterMode": false } ]
能夠看到上面配置規則是一個數組類型,數組中的每一個對象是針對每個保護資源的配置對象,每一個對象中的屬性解釋以下:
0
表明根據併發數量來限流,1
表明根據QPS來進行流量控制這裏咱們只作簡單的配置解釋,以便於理解這裏的配置做用。實際上這裏還有很是多可配置選項和規則,更復雜的配置後面咱們單獨開一篇來深刻學習。
第六步:啓動應用。若是一些順利,能夠看到相似下面的日誌,表明已經成功從Nacos加載了一條限流規則:
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
經過postman或者curl訪問幾下localhost:8002/hello
接口:
$ curl localhost:8002/hello didispace.com
此時,在Sentinel Dashboard中就能夠看到當前咱們啓動的sentinel-datasource-apollo
服務。點擊左側菜單中的流控規則,能夠看到已經存在一條記錄了,這條記錄就是上面咱們在Apollo中配置的限流規則。
在使用Apollo存儲規則配置的時候與Nacos存儲同樣,對於Sentinel控制檯這些數據是隻讀的,也就是說:
本文介紹內容的客戶端代碼,示例讀者能夠經過查看下面倉庫中的alibaba-sentinel-datasource-apollo
項目:
若是您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!
下面是Sentinel的倉庫地址與官方文檔,讀者也能夠本身查閱文檔學習: