apollo持久化sentinel_Spring Cloud Alibaba基礎教程:Sentinel使用Apollo存儲規則

上一篇我們介紹了如何通過Nacos的配置功能來存儲限流規則。Apollo是國內用戶非常多的配置中心,所以,今天我們繼續說說Spring Cloud Alibaba Sentinel中如何將流控規則存儲在Apollo中。

使用Apollo存儲限流規則

Sentinel自身就支持了多種不同的數據源來持久化規則配置,目前包括以下幾種方式:

文件配置

ZooKeeper配置

本文我們就來一起動手嘗試一下,如何使用Apollo來存儲限流規則。

準備工作

下面我們將同時使用到Apollo和Sentinel Dashboard,所以可以先把Apollo和Sentinel Dashboard啟動起來。

如果還沒入門Sentinel Dashboard可以通過文末的系列目錄先學習之前的內容。Apollo的話相對復雜一些,這里不做詳細介紹了,如果還沒有接觸過Apollo的讀者可以查看其官方文檔進一步學習。

應用配置

第一步:在Spring Cloud應用的pom.xml中引入Spring Cloud Alibaba的Sentinel模塊和Apollo存儲擴展:

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應用中配置的服務信息,在resource目錄下,創建apollo-env.properties文件,內容樣例:

local.meta=http://192.168.0.201:8080

dev.meta=http://192.168.0.202:8080

復制代碼

這里需要了解Apollo對多環境的配置,這里設置的是每個環境不同的配置服務地址,讀者需要根據自己的實際情況修改。

第三步:在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相關配置的對應關系可見下圖所示:

第四步:創建應用主類,并提供一個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

}

]

復制代碼

可以看到上面配置規則是一個數組類型,數組中的每個對象是針對每一個保護資源的配置對象,每個對象中的屬性解釋如下:

resource:資源名,即限流規則的作用對象

limitApp:流控針對的調用來源,若為 default 則不區分調用來源

grade:限流閾值類型(QPS 或并發線程數);0代表根據并發數量來限流,1代表根據QPS來進行流量控制

count:限流閾值

strategy:調用關系限流策略

controlBehavior:流量控制效果(直接拒絕、Warm Up、勻速排隊)

clusterMode:是否為集群模式

這里我們只做簡單的配置解釋,以便于理解這里的配置作用。實際上這里還有非常多可配置選項和規則,更復雜的配置后面我們單獨開一篇來深入學習。

第六步:啟動應用。如果一些順利,可以看到類似下面的日志,代表已經成功從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控制臺這些數據是只讀的,也就是說:

Sentinel控制臺中修改規則:僅存在于服務的內存中,不會修改Apollo中的配置值,重啟后恢復原來的值。

Nacos控制臺中修改規則:服務的內存中規則會更新,Apollo中持久化規則也會更新,重啟后依然保持。

代碼示例

本文介紹內容的客戶端代碼,示例讀者可以通過查看下面倉庫中的alibaba-sentinel-datasource-apollo項目:

如果您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!

參考資料

下面是Sentinel的倉庫地址與官方文檔,讀者也可以自己查閱文檔學習:

系列回顧

專題推薦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397158.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lintcode: Unique Paths

C dp 遞推式&#xff1a;dp[i][j] dp[i-1][j] dp[i][j-1] 初值&#xff1a;dp[i][j] 1&#xff0c;i0 or j0 空間優化&#xff1a;省掉一維 1 class Solution {2 public:3 /**4 * param n, m: positive integer (1 < n ,m < 100)5 * return an integer6…

idea 如何隱藏/展示不想看到的文件

隱藏&#xff1a;在 Ignore files and folders中添加想要過濾的文件或文件夾名稱 展示隱藏文件&#xff1a; 在過濾列表中刪除掉文件或者文件夾就好了 轉載于:https://www.cnblogs.com/mengjianzhou/p/6177897.html

BZOJ2286: [Sdoi2011]消耗戰(虛樹)

BZOJ2286: [Sdoi2011]消耗戰 Time Limit: 20 Sec   Memory Limit: 512 MB Description 在一場戰爭中&#xff0c;戰場由n個島嶼和n-1個橋梁組成&#xff0c;保證每兩個島嶼間有且僅有一條路徑可達。現在&#xff0c;我軍已經偵查到敵軍的總部在編號為1的島嶼&#xff0c;而且…

Java基礎知識:Java實現Map集合二級聯動4

comboBox.setModel(new DefaultComboBoxModel(getProvince())); // 添加省份信息 final JLabel label new JLabel(); label.setText("省/直轄市"); label.setBounds(155, 30, 66, 18); panel.add(label); final JLabel label_1 new JLabel(); label_1.setText(&quo…

linux QT 結束當前進程_Qt編寫控件屬性設計器7-串口采集

一、前言數據源是組態軟件的核心靈魂&#xff0c;少了數據源&#xff0c;組態就是個花架子沒卵用&#xff0c;一般數據源有三種方式獲取&#xff0c;串口、網絡、數據庫&#xff0c;至于數據規則是什么&#xff0c;這個用戶自己指定&#xff0c;本設計器全部采用第一個字節作為…

magento2郵件調試方法

order mail 直接打印到頁面上 位置 vendor\magento\module-sales\Model\Order\Email\Sender.php Magento\Sales\Model\Order\Email\Sender::prepareTemplate() 添加代碼 $objectManager \Magento\Framework\App\ObjectManager::getInstance(); $templateFactory $objectManag…

python多進程怎么樣_Python執行多進程任務的方法

Python的多進程可以借助from multiprocessing import Pool來實現。簡而言之分為這樣幾步&#xff1a;導入包from multiprocessing import Pool編寫任務函數。def 任務函數(參數)實例化進程池并設置進程數。poolPool(欲設置的進程數)開始布置任務&#xff0c;把多個任務添加進多…

JAVA多線程之Synchronize 關鍵字原理

image眾所周知 Synchronize 關鍵字是解決并發問題常用解決方案&#xff0c;有以下三種使用方式: 同步普通方法&#xff0c;鎖的是當前對象。同步靜態方法&#xff0c;鎖的是當前 Class 對象。同步塊&#xff0c;鎖的是 {} 中的對象。實現原理&#xff1a;JVM 是通過進入、退出對…

iOS-數據持久化-第三方框架FMDB的使用

FMDB簡單介紹 一、簡單說明 1.什么是FMDB FMDB是iOS平臺的SQLite數據庫框架 FMDB以OC的方式封裝了SQLite的C語言API 2.FMDB的優點 使用起來更加面向對象&#xff0c;省去了很多麻煩、冗余的C語言代碼 對比蘋果自帶的Core Data框架&#xff0c;更加輕量級和靈活 提供了多線程安全…

電腦word文檔打不開怎么辦_word怎么轉pdf?兩個值得學習的高效轉換法

word怎么轉pdf&#xff1f;兩個值得學習的高效轉換法word怎么轉pdf&#xff1f;pdf格式是我們經常能夠使用到的格式&#xff0c;因為pdf格式在傳遞的過程中能更好地避免文件出現亂碼打不開或誤觸導致文件被修改的情況。那如果想要把word文件轉換成pdf格式以避免閱讀word時文件被…

sql server常用函數、常用語句

一、常用函數 1.字符串函數 &#xff1a; charindex(:,abc:123) --尋找一個字符在一段字符串中起始的位置 len(zhangsan) --獲取一段字符串的長度 left(Ly,君子之耀,2) --從一段字符串左邊返回指定長度的字符 right(char_expr,int_expr) --返回字符串右邊int_expr個字符 …

python 矩陣乘法 跳過nan_python – Numpy:當一些向量元素等于零時,矩陣向量乘法不會跳過計算嗎?...

我最近一直致力于一個項目,其中我的大部分時間花費在密集矩陣A和稀疏向量v上(見here).在我嘗試減少計算時,我注意到A.dot(v)的運行時間不受v的零條目數的影響.為了解釋為什么我希望在這種情況下改進運行時,讓result A.dot.v使得j 1的結果[j] sum_i(A [i,j] * v [j])… v.sha…

[轉]Responsive Tables Demo

本文轉自&#xff1a;http://elvery.net/demo/responsive-tables/ A quick and dirty look at some techniques for designing responsive table layouts. This was put together in haste (and with the aid of Twitter Bootstrap) for What Do You Know Brisbane hosted by W…

Scala函數式對象-有理數

有理數類的表示 實現規范&#xff1a;支持有理數的加減乘除&#xff0c;并支持有理數的規范表示 1.定義Rational 首先&#xff0c;考慮用戶如何使用這個類&#xff0c;我們已經決定使用“Immutable”方式來使用Rational對象&#xff0c;我們需要用戶在定義Rational對象時提供分…

2020雙十一實時大屏_2020拼多多雙十一,拼多多雙十一活動

2020拼多多雙十一&#xff0c;拼多多雙十一活動&#xff0c;2020拼多多雙十一&#xff0c;拼多多雙十一活動2020拼多多雙十一&#xff0c;拼多多雙十一活動拼多多雙11來了全球狂歡節先領券再購物低價風暴 震撼來襲沒有最低 只有更低拼多多優惠券商城拼多多優惠商城&#xff0c;…

dataTables本地刷新數據解決只能初始化一次問題

2019獨角獸企業重金招聘Python工程師標準>>> dataTables的表格只能初始化一次&#xff0c;這樣如果需要動態改變表格數據的話就需要寫多個表格&#xff0c;這樣很顯然不是一個好的解決方案。 dataTables Api提供了刷新數據解決方案&#xff1a; 這里大概說一下案例&…

安裝Ubuntu版本linux過程中沒有提示設置root用戶密碼問題的解決辦法

原來ubunto不提倡設置root用戶&#xff0c;系統安裝成功后&#xff0c;root密碼是隨機的&#xff0c;那么在這種情況下如何得到root權限吶&#xff0c;具體方法如下&#xff1a; 終端中輸入&#xff1a;sudo passwd root 此時重新設置原登錄用戶的密碼。 設置成功后在終端繼續輸…

linux命令headtail

一、head語法head [-n -k ]... [FILE]...//k是數字默認是顯示開頭前10行。head /etc/passwd顯示開頭前5行head -5 /etc/passwdhead -n 5 /etc/passwd&#xff08;注意和以下的有-的差別&#xff09;head -n 5 /etc/passwd 除最后k行外&#xff0c;顯示剩余所有內容。head -n -5…

用-force –opengl 指令_蘋果新系統ios14新功能匯總 輕點背面等小技巧怎么用

在 iOS 14 以及更新系統中&#xff0c;蘋果為 iPhone X 以及更新機型帶來了“輕點背面”功能&#xff0c;可以讓用戶輕點手機背面來實現更多操作&#xff0c;并且這項功能還支持“快捷指令”。例如&#xff0c;如果您不希望應用讀取剪貼板中私密內容&#xff0c;可以利用“輕點…

PE文件格式(加密與解密3)(一)

本次的了解主要講解 PE的基本概念、MS-DOS文件頭、PE文件頭、區塊、輸入表、輸出表等。 這里我將會結合一個簡單的小程序來加深我對PE文件結構的了解。 使用學習工具&#xff1a;有StudyPE、LordPE、PEID。 學習PE建議看書。。和自己動手。。。 PE文件&#xff1a; 在WIN上&…