<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] >[warning] 端口變更提醒: v3.1端口是8087 | v3.2 端口改為 9000 ## jeecg-cloud-sentinel ![](https://img.kancloud.cn/70/d8/70d8fb095a6de35b9ae668356223ba02_560x671.png) ### 啟動sentinel項目 ``` com.alibaba.csp.sentinel.dashboard.JeecgSentinelDashboardApplication ``` ![](https://img.kancloud.cn/c6/fd/c6fd364dc0292c089791d87f50cf81f1_479x185.png) 訪問地址 [http://localhost:9000](http://localhost:9000) 賬號密碼:sentinel/sentinel ![](https://img.kancloud.cn/a7/9b/a79be1a5f8ec3aca0dbc412b000c294b_1146x669.png) **說明:第一次訪問,內容是空。** ![](https://img.kancloud.cn/20/ff/20ff90d10cb1b357de441651393bebc8_1920x848.png) 訪問任意接口,就會出現應用 ![](https://img.kancloud.cn/09/69/0969aeca22df698ee75937e701d189c0_2536x1123.png) ### 項目集成 #### 網關集成sentinel 1.jeecg-cloud-gateway中添加sentinel依賴 ~~~ <!--sentinel 限流熔點降級--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!-- sentinel集成nacos作為數據源 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> <!--- sentinel流控鏈路不生效 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-web-servlet</artifactId> </dependency> ~~~ 添加sentinel配置 ~~~ #Sentinel配置 sentinel: transport: dashboard: jeecg-boot-sentinel:9000 # 支持鏈路限流 web-context-unify: false filter: enabled: false # 取消Sentinel控制臺懶加載 eager: false datasource: #流控規則 flow: # 指定數據源名稱 # 指定nacos數據源 nacos: server-addr: @config.server-addr@ # 指定配置文件 dataId: ${spring.application.name}-flow-rules # 指定分組 groupId: SENTINEL_GROUP # 指定配置文件規則類型 rule-type: flow # 指定配置文件數據格式 data-type: json #降級規則 degrade: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-degrade-rules groupId: SENTINEL_GROUP rule-type: degrade data-type: json #系統規則 system: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-system-rules groupId: SENTINEL_GROUP rule-type: system data-type: json #授權規則 authority: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-authority-rules groupId: SENTINEL_GROUP rule-type: authority data-type: json #熱點參數 param-flow: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-param-flow-rules groupId: SENTINEL_GROUP rule-type: param-flow data-type: json #網關流控規則 gw-flow: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-flow-rules groupId: SENTINEL_GROUP rule-type: gw-flow data-type: json #API流控規則 gw-api-group: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-api-rules groupId: SENTINEL_GROUP rule-type: gw-api-group data-type: json ~~~ #### 非網關模塊集成 以system模塊為例說明如何限流某個接口 1.jeecg-cloud-system 模塊中需加入如下依賴,目的是使用@SentinelResource注解 ~~~ <!-- sentinel限流熔斷降級 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>${sentinel-core.version}</version> </dependency> ~~~ 2.jeecg-cloud-system-start 引入sentinel配置 如下所示 ~~~ server: #微服務端口 port: 7001 spring: application: name: jeecg-system cloud: #Sentinel配置 sentinel: transport: dashboard: localhost:9000 datasource: #流控規則 flow: # 指定數據源名稱 # 指定nacos數據源 nacos: server-addr: @config.server-addr@ # 指定配置文件 dataId: ${spring.application.name}-flow-rules # 指定分組 groupId: SENTINEL_GROUP # 指定配置文件規則類型 rule-type: flow # 指定配置文件數據格式 data-type: json #降級規則 degrade: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-degrade-rules groupId: SENTINEL_GROUP rule-type: degrade data-type: json #系統規則 system: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-system-rules groupId: SENTINEL_GROUP rule-type: system data-type: json #授權規則 authority: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-authority-rules groupId: SENTINEL_GROUP rule-type: authority data-type: json #熱點參數 param-flow: nacos: server-addr: @config.server-addr@ dataId: ${spring.application.name}-param-flow-rules groupId: SENTINEL_GROUP rule-type: param-flow data-type: json ~~~ ### 規則配置 #### 流控配置 [配置說明](https://github.com/alibaba/Sentinel/wiki/%E7%BD%91%E5%85%B3%E9%99%90%E6%B5%81) 1.通過RouteID(路由名稱)限制整個服務模塊的接口 ![](https://img.kancloud.cn/94/7a/947a0553225f0d50714ee4b7ee477165_1208x758.png) 2.打開接口文檔進行測試,點擊system模塊中任意接口 ![](https://img.kancloud.cn/60/b5/60b51b7a602c02aeb9971c8712c5201a_1522x656.gif) 2.通過API分組限制某一個或者某一組接口 ![](https://img.kancloud.cn/f3/bc/f3bcdd9624e8f9de43d9ddf1edd10b10_1196x554.png) ![](https://img.kancloud.cn/1b/b5/1bb56976f9947777334ed5eaff65e908_1200x710.png) 測試同上 #### 熔斷配置 [配置說明](https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7) ![](https://img.kancloud.cn/9f/8a/9f8a8a95e5777f7b9c5e0975342bf979_1194x611.png) Sentinel 提供以下幾種熔斷策略: * 慢調用比例 (`SLOW_REQUEST_RATIO`):選擇以慢調用比例作為閾值,需要設置允許的慢調用 RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。當單位統計時長(`statIntervalMs`)內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求響應時間小于設置的慢調用 RT 則結束熔斷,若大于設置的慢調用 RT 則會再次被熔斷。 * 異常比例 (`ERROR_RATIO`):當單位統計時長(`statIntervalMs`)內請求數目大于設置的最小請求數目,并且異常的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。異常比率的閾值范圍是`[0.0, 1.0]`,代表 0% - 100%。 * 異常數 (`ERROR_COUNT`):當單位統計時長內的異常數目超過閾值之后會自動進行熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。 快速點擊觸發熔斷 ![](https://img.kancloud.cn/a3/cd/a3cdc7598732c647b6348fbba70079d4_1220x710.png) **注:gateway層面只能針對網關進行路由熔斷降級。 不能針對@SentinelResource(value ="test")中的tes限流降級** #### 系統規則 [配置說明](https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81) 系統保護規則是從應用級別的入口流量進行控制,從單臺機器的 load、CPU 使用率、平均 RT、入口 QPS 和并發線程數等幾個維度監控應用指標,讓系統盡可能跑在最大吞吐量的同時保證系統整體的穩定性。 系統保護規則是應用整體維度的,而不是資源維度的,并且**僅對入口流量生效**。入口流量指的是進入應用的流量(`EntryType.IN`),比如 Web 服務或 Dubbo 服務端接收的請求,都屬于入口流量。 系統規則支持以下的模式: * **Load 自適應**(僅對 Linux/Unix-like 機器生效):系統的 load1 作為啟發指標,進行自適應系統保護。當系統 load1 超過設定的啟發值,且系統當前的并發線程數超過估算的系統容量時才會觸發系統保護(BBR 階段)。系統容量由系統的`maxQps * minRt`估算得出。設定參考值一般是`CPU cores * 2.5`。 * **CPU usage**(1.5.0+ 版本):當系統 CPU 使用率超過閾值即觸發系統保護(取值范圍 0.0-1.0),比較靈敏。 * **平均 RT**:當單臺機器上所有入口流量的平均 RT 達到閾值即觸發系統保護,單位是毫秒。 * **并發線程數**:當單臺機器上所有入口流量的并發線程數達到閾值即觸發系統保護。 * **入口 QPS**:當單臺機器上所有入口流量的 QPS 達到閾值即觸發系統保護。 一下配置表示全局所有入口每秒只能通過1次 ![](https://img.kancloud.cn/0a/09/0a09a6cb00c67047fd10192dcf3df40f_1201x597.png) 測試如下 ![](https://img.kancloud.cn/b2/07/b2078da09f1d579e461283488754009a_1234x704.png) #### 熱點規則 何為熱點?熱點即經常訪問的數據。很多時候我們希望統計某個熱點數據中訪問頻次最高的 Top K 數據,并對其訪問進行限制。比如: * 商品 ID 為參數,統計一段時間內最常購買的商品 ID 并進行限制 * 用戶 ID 為參數,針對一段時間內頻繁訪問的用戶 ID 進行限制 熱點參數限流會統計傳入參數中的熱點參數,并根據配置的限流閾值與模式,對包含熱點參數的資源調用進行限流。熱點參數限流可以看做是一種特殊的流量控制,僅對包含熱點參數的資源調用生效。 [配置說明](https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81) 以sysetm模塊職務列表為例說明 1.添加 @SentinelResource(value = "position")注解 value名字就是資源名如下圖 ![](https://img.kancloud.cn/b0/35/b035629da69ab4813c3ce1d26393fc2f_1070x462.png) 2.添加熱點規則 ![](https://img.kancloud.cn/ba/5a/ba5a3bc51923c90b63b29418c9fecfd2_1214x674.png) 或者通過熱點規則菜單添加 ![](https://img.kancloud.cn/5a/f8/5af89cb4290652f0cacb0cbb2af3e480_1215x645.png) 3.測試熱點規則,此處設置參數索引為0,僅做測試,具體場景需要結合真實業務場景 ![](https://img.kancloud.cn/bd/79/bd7969e1c2708d745bc88e26f24f943a_1126x691.png) 4.編寫熱點規則攔截器,系統內置規則代碼如下(當不滿足業務規則時需自行修改攔截規則) ``` /** * sentinel ip授權規則攔截器(黑名單白名單),改規則支持參數和IP攔截模式,當參數為空時走ip攔截模式 * * @author zyf */ @Component public class DefaultRequestOriginParser implements RequestOriginParser { @Override public String parseOrigin(HttpServletRequest request) { //基于請求參數,origin對應授權規則中的流控應用名稱,也可通過getHeader傳參 String origin = request.getParameter("origin"); if (StringUtils.isNotEmpty(origin)) { return origin; } else { //當參數為空使用ip攔截模式 String ip = IpUtils.getIpAddr(request); return ip; } } } ``` #### 授權規則 很多時候,我們需要根據調用來源來判斷該次請求是否允許放行,這時候可以使用 Sentinel 的來源訪問控制(黑白名單控制)的功能。來源訪問控制根據資源的請求來源(`origin`)限制資源是否通過,若配置白名單則只有請求來源位于白名單內時才可通過;若配置黑名單則請求來源位于黑名單時不通過,其余的請求通過。 規則配置 來源訪問控制規則(`AuthorityRule`)非常簡單,主要有以下配置項: * `resource`:資源名,即限流規則的作用對象。 * `limitApp`:對應的黑名單/白名單,不同 origin 用`,`分隔,如`appA,appB`。 * `strategy`:限制模式,`AUTHORITY_WHITE`為白名單模式,`AUTHORITY_BLACK`為黑名單模式,默認為白名單模式。 1.添加授權規則 ![](https://img.kancloud.cn/14/4f/144f1d0ab3e13b787fab87cd5cc5f4fc_1202x646.png) ![](https://img.kancloud.cn/63/e0/63e0c70ca31afd3586c5d37520c9c74a_990x503.png) 2.測試授權規則 當origin=app1時如下圖 ![](https://img.kancloud.cn/51/00/5100cf8987dbbadc45d75f96bed765ae_1207x758.png) 當origin=app2時如下圖 ![](https://img.kancloud.cn/d8/7e/d87ec6c9b42b3719d822a14ad1d64378_913x611.png) **docker 部署腳本:** `bladex/sentinel-dashboard`, 默認賬號密碼為 \[sentinel sentinel\] ``` version: '3.5' services: sentinel-dashboard: image: bladex/sentinel-dashboard:1.8.0 container_name: sentinel-dashboard #account and password: [sentinel sentinel] #修改默認密碼為 123456 environment: - sentinel.dashboard.auth.password=123456 restart: always ports: - 8858:8858 ``` * 官方文檔:[https://sentinelguard.io/zh-cn/docs/dashboard.html](https://sentinelguard.io/zh-cn/docs/dashboard.html) * 推薦學習視頻: [Sentinel視頻教程](https://www.bilibili.com/video/BV12A411E7aX?p=16)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看