最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

深度解析微服務(wù)高并發(fā)動態(tài)數(shù)據(jù)源:使用Redis動態(tài)數(shù)據(jù)源

2023-03-20 16:39 作者:兩年半的java練習(xí)生  | 我要投稿

動態(tài)數(shù)據(jù)源

Sentinel為每種規(guī)則提供一個規(guī)則管理器,而規(guī)則管理器管理的規(guī)則只存在于內(nèi)存中,在應(yīng)用重啟后,規(guī)則會丟失。每個規(guī)則管理器都會提供loadRules API,用于在系統(tǒng)運行時為規(guī)則管理器注冊或更新規(guī)則,但是loadRules只接收內(nèi)存狀態(tài)的規(guī)則對象,如何存儲規(guī)則由我們自行實現(xiàn)。

由于規(guī)則可能會發(fā)生改變,如果使用application.yaml(SpringBoot應(yīng)用)配置文件配置規(guī)則,或者直接使用硬編碼方式配置規(guī)則,則每當(dāng)要修改規(guī)則時都需要重啟應(yīng)用。

為了解決這個問題,我們需要實現(xiàn)規(guī)則動態(tài)配置。

本篇內(nèi)容主要包括以下幾個方面。

? 實現(xiàn)規(guī)則動態(tài)配置的兩種方式。

? 使用Redis動態(tài)數(shù)據(jù)源。

? 動態(tài)配置的實現(xiàn)原理。

? 基于SpringCloud動態(tài)配置實現(xiàn)動態(tài)數(shù)據(jù)源。

實現(xiàn)規(guī)則動態(tài)配置的兩種方式

實現(xiàn)規(guī)則動態(tài)配置有兩種方式:一種是先利用Sentinel提供的loadRules API,將規(guī)則存儲到數(shù)據(jù)庫、文件中等,定時加載規(guī)則,再調(diào)用loadRules API更新規(guī)則;另一種是利用Sentinel提供的DataSource擴(kuò)展,結(jié)合配置中心使用,實現(xiàn)Sentinel提供的ReadableDataSource接口,并實現(xiàn)監(jiān)聽配置中心配置改變以實時獲取更新后的配置。

Sentinel控制臺支持修改規(guī)則配置,使用的是第一種方式,即通過調(diào)用loadRules API更新規(guī)則,但是并不提供規(guī)則持久化的支持,這也是當(dāng)應(yīng)用重啟后在控制臺配置的規(guī)則不生效的原因。

Sentinel已提供基于第二種方式的適配多種配置中心的動態(tài)數(shù)據(jù)源,如適配Nacos的NacosDataSource、適配Redis的RedisDataSource。本章只介紹如何使用RedisDataSource實現(xiàn)規(guī)則動態(tài)配置,如果想要了解如何使用NacosDataSource實現(xiàn)規(guī)則動態(tài)配置,則可以直接瀏覽官方文檔中的“動態(tài)規(guī)則擴(kuò)展”部分。

使用Redis動態(tài)數(shù)據(jù)源

RedisDataSource使用Redis的string數(shù)據(jù)結(jié)構(gòu)存儲規(guī)則配置,并且使用Redis的發(fā)布-訂閱功能監(jiān)聽獲取更新后的規(guī)則。

要使用RedisDataSource,首先需要導(dǎo)入其jar包。

如果是使用Maven構(gòu)建的項目,則需要在項目的pom.xml文件中添加如下配置。


如果是使用Gradle構(gòu)建的項目,則需要在項目的gradle.build文件中添加如下配置。


注意:版本號建議與項目中使用的sentinel-core版本號一致,從而避免因為API差異,配置不生效的情況發(fā)生。

在使用RedisDataSource時,需要為用到的每種流量控制規(guī)則單獨配置一個RedisDataSource。假設(shè)當(dāng)前只需要使用限流功能,那么只需要注冊一個用于讀取限流規(guī)則的RedisDataSource即可,代碼如下。


Sentinel提供InitFunc,可用于在Sentinel初始化之前為Sentinel添加配置,在本案例中并未使用InitFunc,而是使用了SpringBoot的配置類實現(xiàn)配置,在SentinelConfiguration類被加載時,為Sentinel注冊限流規(guī)則的動態(tài)數(shù)據(jù)源,詳細(xì)步驟分析如下。

①因為規(guī)則以string數(shù)據(jù)結(jié)構(gòu)被存儲在Redis中,所以需要一個規(guī)則轉(zhuǎn)換器,用于將從Redis中讀取的規(guī)則配置字符串轉(zhuǎn)換為FlowRule數(shù)組,如果是以JSON格式存儲的規(guī)則,則該轉(zhuǎn)換器就是實現(xiàn)JSON字符串的序列化與反序列化。

② RedisDataSource需要操作Redis,所以需要提供可以連接到Redis的配置。

③ 創(chuàng)建一個RedisDataSource實例。RedisDataSource構(gòu)造方法有4個參數(shù):config表示Redis連接配置;ruleKey表示緩存規(guī)則的key;channel表示發(fā)布-訂閱的通道;flowConfigParser表示規(guī)則轉(zhuǎn)換器。

④ 調(diào)用限流規(guī)則管理器的register2Property API注冊數(shù)據(jù)源。

提示:在SpringBoot項目中,推薦實現(xiàn)ApplicationRunner接口,并在Spring容器初始化完成時再為Sentinel添加配置,此時應(yīng)用還未接收請求。

當(dāng)服務(wù)上線后,如果需要修改限流規(guī)則,則需要先將修改后的限流規(guī)則轉(zhuǎn)換為JSON字符串,再修改ruleKey的value為新的JSON字符串,同時使用Redis的PUBLISH命令向channel中寫入新的JSON字符串。

本文給大家講解的內(nèi)容是深度解析微服務(wù)高并發(fā)動態(tài)數(shù)據(jù)源 :實現(xiàn)規(guī)則動態(tài)配置的兩種方式,使用Redis動態(tài)數(shù)據(jù)源

  • 感謝大家的支持!


深度解析微服務(wù)高并發(fā)動態(tài)數(shù)據(jù)源:使用Redis動態(tài)數(shù)據(jù)源的評論 (共 條)

分享到微博請遵守國家法律
海宁市| 南宫市| 恩平市| 平定县| 北票市| 衡山县| 嘉黎县| 鲁甸县| 苏尼特右旗| 裕民县| 慈利县| 高淳县| 体育| 肇源县| 囊谦县| 黔西| 吴桥县| 五寨县| 隆尧县| 巴彦县| 台湾省| 敖汉旗| 阿拉善右旗| 万全县| 康马县| 马尔康县| 云和县| 伊金霍洛旗| 宝鸡市| 保康县| 湛江市| 会理县| 临夏市| 化隆| 张家界市| 韶山市| 扶风县| 甘孜县| 景洪市| 乌鲁木齐县| 怀远县|