springcloud(四)整合sentinel


Sentinel 是面向分布式服務架構的流量控制組件,主要以流量為切入點,從流量控制、熔斷降級、系統自適應保護等多個維度來幫助保障微服務的穩定性。

規則:圍繞資源的實時狀態設定的規則,可以包括流量控制規則、熔斷降級規則以及系統保護規則。所有規則可以動態實時調整。

 

服務端 

下載sentinel服務端 地址:https://github.com/alibaba/Sentinel/releases

sentinel服務端也是基於springboot開發  它的版本與客戶端發開的springboot版本毫無聯系,所以sentinel下載任何版本都可用

下載完以后直接java -jar運行  默認是8080端口   登錄網址http://127.0.0.1:8080/login   賬號/密碼:sentinel  

未整合客戶端之前登錄

 

 

客戶端


直接在pom中引入下面的依賴  版本可自行配置

 

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

 

配置文件 我使用的是yml文件

 

spring:
  cloud:
     sentinel:
        transport:
           #連接sentinel的dashboard
           dashboard: 127.0.0.1:8080
           #client-ip: 192.168.0.9:9000
           port: 8719 #注意這里的端口默認是8719  如果8719被占用會自動+1 無需當心 
           #eager: true 
               
#暴露的健康檢查服務端點
management:
  endpoint:
    web:
      exposure:
        include: '*'

 

注:若整合完以后發現服務端還是未監聽到任何客戶端服務,那是因為sentinel是懶加載 需要先訪問一次接口

 

最終整合完成的結果

 

 

sentinel 自定義返回錯誤

例如:

限流  重寫之前

 

 重寫之后

 

 

方法很簡單只需要重寫BlockExceptionHandler 

/**
 * 自定義Sentinel異常實現
 * 
 * @author Administrator
 *
 */
@Component
public class MyBlockHandler implements BlockExceptionHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws Exception {
        String msg = null;
        if (ex instanceof FlowException) {
            msg = "已被限流";
        } else if (ex instanceof DegradeException) {
            msg = "已被降級";
        } else if (ex instanceof ParamFlowException) {
            msg = "已被熱點參數限流";
        } else if (ex instanceof SystemBlockException) {
            msg = "系統規則";
        } else if (ex instanceof AuthorityException) {
            msg = "授權規則";
        }

        response.setStatus(500);
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Type", "application/json;charset=utf-8");
        response.setContentType("application/json;charset=utf-8");
        new ObjectMapper().writeValue(response.getWriter(), msg);
        
    }

}

 


免責聲明!

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



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