Spring cloud微服務安全實戰-6-8sentinel限流實戰


阿里2018年開源的。


簡單來說就是干三件事,最終的結果就是保證你的服務可用,不會崩掉。保證服務高可用。

流控

先從最簡單的場景來入手。
1.引用一個依賴,
2,聲明一個資源。
3.聲明一個規則

注意依賴是加在你的微服務上的,每一個微服務都要加一個sentinel的依賴。


maven上搜索




聲明資源

聲明資源 就是你要保護的程序,或者是你要進行流控的那段邏輯。
最簡單的方式就是寫一段代碼。
Entry注意是alibaba.csp包下的


現在在創建訂單的,所以這里起的名字就叫做createOrder

try里面就是你要指定規則的那段代碼。我們只是輸出日志,
當限流觸發的時候會拋出BlockExceprion

 

聲明了createOrder的資源,資源的內容是 try里面的代碼。當然任何一對代碼都做為資源。只要你用try catch這種方式把他包起來就可以了。

定義規則

爭對createOrder資源的那段代碼定義規則,規則有很多種,你可以有流控的規則,可以有限流的規則,可以有熔斷的規則,可以有降級的規則,

我們在這里就聲明一個最簡單的流控的規則。
創建一個config的包





spring的事件監聽器,監聽的是ContextRefreshedEvent

聲明稱spring 的bean
spring的項目都啟動完,所有的bean都組裝好后,里面寫的代碼就是整個系統系統好以后執行的代碼

叫做FlowRule就是流量的規則,設置setResource就是針對createOrder這個資源的

grade流控規則的類型是什么,這里先演示一個最簡單的。每秒請求數量 QPS。
setCount(1)表示每秒只能有一個請求過去

然后加到manager里面, 參數需要一個List的FlowRule

這就是第三部,規則的聲明。

啟動測試

啟動認證服務器



啟動orderAPI


首先去拿令牌


這里沒走網關,直接走的orderAPi

連續多點幾次。

sentinel的日志

默認情況下會在當前用戶的根目錄下面生成一些日志。把當前的規則以及每一個資源的流量情況都記錄下來。









再來看這個,記錄這個資源流量變化的情況。




剛才啟動后的做的那些請求在這都有顯示。

可視化


github上搜索。





用java -jar 啟動這個下載的jar包,啟動的端口是8080,server的地址 localhost:8080


項目的名字


默認的用戶名密碼都是sentinel

把自己的項目接入sentinel

首先加一個新的依賴。


還需要告訴api我的控制台的位置在哪里。通過jvm的參數傳進去的


加這么一個jvm的啟動參數。來告訴orderAPI這個程序,啟動的時候你要往localhost:8080 sentinel的dashboard去注冊。



在這邊點刷新。並不是orderAPI 一起來就馬上注冊的。而是說你的資源有流量訪問 才會去注冊。


所以我們訪問幾次 order的服務


刷新顯示了。當前顯示的名字是應用啟動類的名字,


這是爭對資源的


流控的規則


改造


現在的處理方式,並不是特別SpringBoot的一種處理方式

比如說我們這里的參數

我們是通過jvm的參數傳進去的

實際上在SpringBoot里面我們所有的參數應該配置在配置文件內

資源的聲明,現在是這種try catch的形式。再介紹一個用注解的方式來聲明資源,

最后是依賴,我們引入了兩個。這些都不是很SpringBoot的做法。

改造開始

首先改造依賴。


復制上面的名字去maven上搜索下


復制到orderAPI。這就是把所有需要的jar包都引進來了。



告訴orderAPI,sentinel控制台在哪里,在8080的端口上,


這里的port,當你啟動你的orderAPI的時候,同時sentinel會在8719這個端口再起一個應用,然后用8719這個端口去跟dashboard 8080端口通訊。然后去發心跳。

orderAPI本身就跑在9080端口上的。sentinel會在8719再起一個應用,8719如果不配置的話也是這個端口。

如果端口被占了,可以通過這個配置來改這個端口。讓sentinel可以啟動起來。


資源的聲明

一般會采用注解的方式來聲明資源。
這樣整個create方法就變成了sentinel的資源。

這么改造下來,我們的應用就很springboot風格了。

啟動看效果

啟動orderAPI

多點擊幾次,給他一些流量。如果token過期了 就重新申請個。



現在用的注解,它並不知道 你報錯了以后要怎么處理

它會直接在控制台拋異常出來。


所以如果點的快了 就報500錯誤。這塊怎么處理 后面再講。

刷新 sentinel的控制台。



結束

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM