Spring Cloud Alibaba Sentinel用nacos配置規則

Nacos存儲限流規則

sentinel自身就支持了多種不同的數據源來持久化規則配置,目前包括以下幾種方式:

文件

nacos

zookeeper

apollo

本文將使用Spring Cloud Alibaba的中整合的配置中心Nacos存儲限流規則。

下面我們將同時使用到NacosSentinel Dashboard,所以可以先把NacosSentinel Dashboard啓動起來。

默認配置下啓動後,它們的訪問地址(後續會用到)爲:

應用配置

第一步:在Spring Cloud應用的pom.xml中引入Spring Cloud Alibaba的Sentinel模塊和Nacos存儲擴展:

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba.csp</groupId>
			<artifactId>sentinel-datasource-nacos</artifactId>
			<!--<scope>test</scope>-->
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
				<version>0.2.2.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

第二步:在Spring Cloud應用中添加配置信息:

server.port=8001

# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8080

spring.application.name=sentinle-client

spring.cloud.sentinel.datasource.ds.nacos.server-addr=192.168.5.83
spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-sentinel
spring.cloud.sentinel.datasource.ds.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds.nacos.ruleType=flow
  • spring.cloud.sentinel.transport.dashboard:sentinel dashboard的訪問地址,根據上面準備工作中啓動的實例配置
  • spring.cloud.sentinel.datasource.ds.nacos.server-addr:nacos的訪問地址,,根據上面準備工作中啓動的實例配置
  • spring.cloud.sentinel.datasource.ds.nacos.groupId:nacos中存儲規則的groupId
  • spring.cloud.sentinel.datasource.ds.nacos.dataId:nacos中存儲規則的dataId
  • spring.cloud.sentinel.datasource.ds.nacos.rule-type:該參數是spring cloud alibaba升級到0.2.2之後增加的配置,用來定義存儲的規則類型。所有的規則類型可查看枚舉類:org.springframework.cloud.alibaba.sentinel.datasource.RuleType,每種規則的定義格式可以通過各枚舉值中定義的規則對象來查看,比如限流規則可查看:com.alibaba.csp.sentinel.slots.block.flow.FlowRule

這裏對於dataId使用了${spring.application.name}變量,這樣可以根據應用名來區分不同的規則配置。

注意:由於版本迭代關係,Github Wiki中的文檔信息不一定適用所有版本。比如:在這裏適用的0.2.1版本中,並沒有spring.cloud.sentinel.datasource.ds2.nacos.rule-type這個參數。所以,讀者在使用的時候,可以通過查看org.springframework.cloud.alibaba.sentinel.datasource.config.DataSourcePropertiesConfigurationorg.springframework.cloud.alibaba.sentinel.datasource.config.NacosDataSourceProperties兩個類來分析具體的配置內容,會更爲準確。

比如,Nacos存儲的具體配置類源碼如下:

public class NacosDataSourceProperties extends AbstractDataSourceProperties {

    private String serverAddr;
    private String groupId;
    private String dataId;

    // commercialized usage

    private String endpoint;
    private String namespace;
    private String accessKey;
    private String secretKey;

}

第三步:創建應用主類,並提供一個rest接口,比如:

@RestController
@SpringBootApplication
public class Client1Application {

	public static void main(String[] args) {
		SpringApplication.run(Client1Application.class, args);
	}


	@GetMapping("/test")
	public String test(){
		return "test";
	}
}

第四步:Nacos中創建限流規則的配置,比如:

其中:Data IDGroup就是上面第二步中配置的內容。配置格式選擇JSON,並在配置內容中填入下面的內容:

sentinle-client-sentinel

DEFAULT_GROUP

[{"clusterMode":false,"controlBehavior":0,"count":3.0,"grade":1,"limitApp":"default","resource":"/test","strategy":0}]

可以看到上面配置規則是一個數組類型,數組中的每個對象是針對每一個保護資源的配置對象,每個對象中的屬性解釋如下:

  • resource:資源名,即限流規則的作用對象
  • limitApp:流控針對的調用來源,若爲 default 則不區分調用來源
  • grade:限流閾值類型(QPS 或併發線程數);0代表根據併發數量來限流,1代表根據QPS來進行流量控制
  • count:限流閾值
  • strategy:調用關係限流策略
  • controlBehavior:流量控制效果(直接拒絕、Warm Up、勻速排隊)
  • clusterMode:是否爲集羣模式

第五步:啓動應用。如果一些順利,可以看到類似下面的日誌,代表已經成功從Nacos加載了一條限流規則:

2019-10-14 18:12:42.077  INFO 7036 --- [           main] o.s.c.a.s.c.SentinelDataSourceHandler    : [Sentinel Starter] DataSource ds-sentinel-nacos-datasource load 1 FlowRule
2019-10-14 18:12:42.155  INFO 7036 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8001 (http) with context path ''
2019-10-14 18:12:42.158  INFO 7036 --- [           main] c.l.sentinel.client1.Client1Application  : Started Client1Application in 4.686 seconds (JVM running for 5.382)

通過postman或者curl訪問幾下localhost:8001/test接口就會看到效果啦

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章