sentinel配置持久化到nacos與sentinel集成

部署sentinel控制臺

  1. 拉取sentinel代碼摇展,自己修改后增加nacos持久化https://github.com/hcq0514/Sentinel 注意可自行使用master分支楞卡,未修改可正常運行,my分支是修改完的
  2. 進入到dashboard項目中,使用如下命令將代碼打包成一個 sentinel-dashboard.jar
mvn clean package

3.將jar包打包成docker鏡像

  • Dockerfile
# 該鏡像需要依賴的基礎鏡像
FROM java:8
# 將當前目錄下的jar包復制到docker容器的/目錄下
ADD sentinel-dashboard.jar /sentinel-dashboard.jar
# 聲明服務運行端口
EXPOSE 8885
# 指定docker容器啟動時運行jar包
ENTRYPOINT ["java", "-jar","/sentinel-dashboard.jar"]
# 指定維護者的名字
MAINTAINER hcq
  • run.sh
#!/usr/bin/env bash
# 定義應用組名
group_name='mall'
# 定義應用名稱
app_name='sentinel2'
# 定義應用版本
app_version='1.0-SNAPSHOT'
# 定義應用環(huán)境
profile_active='test'
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包編譯docker鏡像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -p 8885:8885 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-e Dserver.port="8885" \
-e Dcsp.sentinel.dashboard.server="8885" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
  • 運行. run.sh
  1. 登錄控制臺查看
    http://xxx:8885/#/login

網(wǎng)關集成 (部署的應用不管是網(wǎng)關還是項目都需要與sentinel的控制臺發(fā)送心跳秒赤,需要ip等妆档,盡量都使用云服務器等訪問的到的主機萍悴,用本地有可能會導致鏈接不到岩齿,無法展示請求鏈路等其他信息)

  1. 網(wǎng)關層添加依賴(這邊只添加與sentinel有關的依賴尊浓,其他組件不展示)
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.8.0</version>
        </dependency>
  1. 增加配置文件
    如果用docker部署的話記得在dockerFile里面指定project.name這個是客戶端注冊到控制臺的名稱
示例文件
# 該鏡像需要依賴的基礎鏡像
FROM java:8
# 將當前目錄下的jar包復制到docker容器的/目錄下
ADD mall-portal-1.0-SNAPSHOT.jar /mall-portal-1.0-SNAPSHOT.jar
# 聲明服務運行在8085端口
EXPOSE 8085
# 指定docker容器啟動時運行jar包
ENV JAVA_OPTS="\
-Xmx1g \
-Xms1g \
-Xmn512m \
-XX:SurvivorRatio=8 \
-XX:MetaspaceSize=256m "
ENTRYPOINT java ${JAVA_OPTS}  -Dproject.name=mall-portal-service -jar mall-portal-1.0-SNAPSHOT.jar

application.pro

spring:
  main:
    allow-bean-definition-overriding: true
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8885 #部署的dashboard地址
        client-ip: localhost #本機的訪問ip
        port: 8720 #與sentinel交互心跳信息的端口(docker部署項目一點要開啟這個端口,每個項目都不一樣)
      datasource:
        # 名稱隨意,這些是dashboard做持久化后添加規(guī)則纯衍,會在nacos的配置文件中生成該配置(沒用可不添加)
        flow:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            dataId: ${spring.application.name}-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow
        degrade:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            dataId: ${spring.application.name}-degrade-rules
            groupId: SENTINEL_GROUP
            rule-type: degrade
        system:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            dataId: ${spring.application.name}-system-rules
            groupId: SENTINEL_GROUP
            rule-type: system
        authority:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            dataId: ${spring.application.name}-authority-rules
            groupId: SENTINEL_GROUP
            rule-type: authority
        param-flow:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            dataId: ${spring.application.name}-param-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: param-flow
      eager: true

MVC項目集成

  1. 添加依賴(因為此處有版本沖突栋齿,則自己制定版本號)
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.3.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba.csp</groupId>
                    <artifactId>sentinel-spring-webmvc-adapter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-spring-webmvc-adapter</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.8.0</version>
        </dependency>
  1. 增加配置文件(與網(wǎng)關相同,這邊不重復)

open feign集成(默認已導入springcloud與openFeign包)

  1. 開啟sentinel feign配置
feign:
  sentinel:
    enabled: true
  1. 在feign客戶端上添加處理函數(shù)就行(也可添加fallback,不過就不能取到異常)
@FeignClient(value = "mall-member-service", fallbackFactory = MemberFeignClientFallbackFactory.class)

@Component
@Slf4j
public class MemberFeignClientFallbackFactory implements FallbackFactory<MemberFeignClient> {

    @Override
    public MemberFeignClient create(Throwable throwable) {
        log.error("fallback reason:{}", throwable.getMessage());
        return new MemberFeignClient() {
            @Override
            public CommonResult<String> getMemberTest() {
                String info = "該鏈接發(fā)生異常襟诸,請稍后重試";
                if (throwable instanceof FlowException) {
                    info = "該鏈接已流控瓦堵,請稍后重試";
                } else if (throwable instanceof DegradeException) {
                    info = "該鏈接已降級,請稍后重試";
                } else {
                    info = "該鏈接發(fā)生異常歌亲,請稍后重試";
                }
                Asserts.fail(info + throwable.getMessage());
                return null;
//                return CommonResult.failed(info + throwable.getMessage());
            }
        };
    }
}

到這邊基礎的集成已經(jīng)完成


如果正常的話在sentinel的機器列表可以看到有注冊信息

sentinel配置持久化到nacos

  1. 把官方源碼拉下來
  2. 將sentinel-dashboard的pom文件中把范圍test注釋掉
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
<!--            <scope>test</scope>-->
        </dependency>
  1. 將示例文件拷貝到dashboard里面(這里面有3種框架的集成方法)



    把 nacosConfig里面的nacos地址修改為自己的nacos地址

@Bean
    public ConfigService nacosConfigService() throws Exception {
        return ConfigFactory.createConfigService("your nacos address");
    }
  1. 修改controller的方法讓它直接推到nacos(以FlowControllerV1 限流controller為例)
    添加依賴
    @Autowired
    private FlowRuleNacosPublisher flowRuleNacosPublisher;
    @Autowired
    private FlowRuleNacosProvider flowRuleNacosProvider;

    將所有sentinelApiClient.fetchFlowRuleOfMachine(app, ip, port);
    調用的地方都改成 flowRuleNacosProvider.getRules(app)

    將所有sentinelApiClient.setFlowRuleOfMachineAsync(app, ip, port, rules);
    調用的地方都改成  flowRuleNacosPublisher.publish(app, rules);
  1. 修改其他的controller
  2. 可直接參考我sentinel下面的my分支菇用,已經(jīng)實現(xiàn)了持久化
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市陷揪,隨后出現(xiàn)的幾起案子惋鸥,更是在濱河造成了極大的恐慌,老刑警劉巖悍缠,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦绣,死亡現(xiàn)場離奇詭異,居然都是意外死亡飞蚓,警方通過查閱死者的電腦和手機滤港,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趴拧,“玉大人溅漾,你說我怎么就攤上這事≈瘢” “怎么了添履?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脑又。 經(jīng)常有香客問我暮胧,道長,這世上最難降的妖魔是什么挂谍? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任叔壤,我火速辦了婚禮,結果婚禮上口叙,老公的妹妹穿的比我還像新娘炼绘。我一直安慰自己,他們只是感情好妄田,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布俺亮。 她就那樣靜靜地躺著驮捍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脚曾。 梳的紋絲不亂的頭發(fā)上东且,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音本讥,去河邊找鬼珊泳。 笑死,一個胖子當著我的面吹牛拷沸,可吹牛的內(nèi)容都是我干的色查。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼撞芍,長吁一口氣:“原來是場噩夢啊……” “哼秧了!你這毒婦竟也來了?” 一聲冷哼從身側響起序无,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤验毡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帝嗡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晶通,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年丈探,在試婚紗的時候發(fā)現(xiàn)自己被綠了录择。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拔莱。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碗降,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塘秦,到底是詐尸還是另有隱情讼渊,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布尊剔,位于F島的核電站爪幻,受9級特大地震影響,放射性物質發(fā)生泄漏须误。R本人自食惡果不足惜挨稿,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望京痢。 院中可真熱鬧奶甘,春花似錦、人聲如沸祭椰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钉赁,卻和暖如春蹄殃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背你踩。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工诅岩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人带膜。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓按厘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钱慢。 傳聞我的和親對象是個殘疾皇子逮京,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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