SpringCloud Alibaba整合Sentinel
Sentinel 控制台
1. 概述
Sentinel 提供一個輕量級的開源控制台,它提供機器發現以及健康情況管理、監控(單機和集群),規則管理和推送的功能。另外,鑒權在生產環境中也必不可少。這里,我們將會詳細講述如何通過簡單的步驟就可以使用這些功能。
接下來,我們將會逐一介紹如何整合 Sentinel 核心庫和 Dashboard,讓它發揮最大的作用。同時我們也在阿里雲上提供企業級的控制台:AHAS Sentinel 控制台,您只需要幾個簡單的步驟,就能最直觀地看到控制台如何實現這些功能。
Sentinel 控制台包含如下功能:
- 查看機器列表以及健康情況:收集 Sentinel 客戶端發送的心跳包,用於判斷機器是否在線。
- 監控 (單機和集群聚合):通過 Sentinel 客戶端暴露的監控 API,定期拉取並且聚合應用監控信息,最終可以實現秒級的實時監控。
- 規則管理和推送:統一管理推送規則。
- 鑒權:生產環境中鑒權非常重要。這里每個開發者需要根據自己的實際情況進行定制。
注意:Sentinel 控制台目前僅支持單機部署。
2. 啟動控制台[Sentinel服務端]
2.1 獲取 Sentinel 控制台
-
您可以從 release 頁面 下載最新版本的控制台 jar 包。
-
您也可以從最新版本的源碼自行構建 Sentinel 控制台:
- 下載 控制台 工程
- 使用以下命令將代碼打包成一個 fat jar:
mvn clean package
2.2 啟動
注意:啟動 Sentinel 控制台需要 JDK 版本為 1.8 及以上版本。
使用如下命令啟動控制台:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
# 注意上述命令在PowerShell 執行不了,要在cmd中執行
其中 -Dserver.port=8080
用於指定 Sentinel 控制台端口為 8080
。
從 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登錄功能,默認用戶名和密碼都是 sentinel
。可以參考 鑒權模塊文檔 配置用戶名和密碼。
注:若您的應用為 Spring Boot 或 Spring Cloud 應用,您可以通過 Spring 配置文件來指定配置,詳情請參考 Spring Cloud Alibaba Sentinel 文檔。
Sentinel 客戶端
FeginService.java
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @Author xiongmin
* @Description //TODO
* @Date 2020/12/5 20:15
* @Version 1.0
**/
@FeignClient(value = "nacos-provider", fallback = FallBackFeginServiceImpl.class)
public interface FeginService {
@GetMapping(value = "/echo/{message}")
String echo(@PathVariable String message);
@GetMapping(value = "/test/{message}")
String test(@PathVariable String message);
}
FallBackFeginServiceImpl.java
import org.springframework.stereotype.Component;
/**
* @Author xiongmin
* @Description //TODO
* @Date 2020/12/13 19:54
* @Version 1.0
**/
@Component
public class FallBackFeginServiceImpl implements FeginService {
@Override
public String echo(String message) {
String result = "FallBack echo() method";
return result;
}
@Override
public String test(String message) {
String result = "FallBack test() method";
return result;
}
}
編寫一個SpringCloud的消費者用例,配置如下:
前提,要先啟動Nacos和Sentinel
spring:
application:
name: nacos-consumer-feign
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8720
dashboard: localhost:8080
server:
port: 9092
feign:
sentinel:
enabled: true
management:
endpoints:
web:
exposure:
include: "*"
- 應用名稱為
nacos-consumer-feign
,如果不指定,在dashboard上就會顯示你的包路徑,很丑。 spring.cloud.sentinel.transport.port
是本地啟的端口,與dashboard
進行數據交互。官方文檔是這樣寫的:這里的spring.cloud.sentinel.transport.port
端口配置會在應用對應的機器上啟動一個 Http Server,該 Server 會與 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一個限流規則,會把規則數據 push 給這個 Http Server 接收,Http Server 再將規則注冊到 Sentinel 中。spring.cloud.sentinel.transport.dashboard
是指明了dashboard
的地址,格式為IP:Port
。
Sentinel 客戶端注冊到SentinelDashboard 需要時間,項目啟動之后可能要等待一會;如果SentinelDashboard一直沒有加載Sentinel 客戶端的話,可以將服務提供者暫時關閉,那么請求接口就會在SentinelDashboard有記錄。
如果SentinelDashboard檢測到Sentinel 客戶端的話,那么此時會多一個名為
應用程序名
的服務
參考鏈接