dengsixing преди 3 години
родител
ревизия
284aa7e3f5
променени са 3 файла, в които са добавени 109 реда и са изтрити 1 реда
  1. 28 0
      pom.xml
  2. 49 0
      src/main/java/com/fdkankan/gateway/config/SentinelPersistenceConfig.java
  3. 32 1
      src/main/resources/bootstrap-test.yml

+ 28 - 0
pom.xml

@@ -17,6 +17,7 @@
     <properties>
         <java.version>1.8</java.version>
         <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
+        <servlet-api-version>2.4</servlet-api-version>
     </properties>
 
     <repositories>
@@ -129,6 +130,33 @@
             <version>1.30.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-datasource-nacos</artifactId>
+            <version>1.7.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
+        </dependency>
+
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.csp</groupId>-->
+<!--            <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>-->
+<!--        </dependency>-->
+
+<!--        <dependency>-->
+<!--            <groupId>javax.servlet</groupId>-->
+<!--            <artifactId>servlet-api</artifactId>-->
+<!--            <version>${servlet-api-version}</version>-->
+<!--        </dependency>-->
+
     </dependencies>
 
     <dependencyManagement>

+ 49 - 0
src/main/java/com/fdkankan/gateway/config/SentinelPersistenceConfig.java

@@ -0,0 +1,49 @@
+package com.fdkankan.gateway.config;
+
+
+import com.alibaba.cloud.sentinel.SentinelProperties;
+import com.alibaba.cloud.sentinel.datasource.config.NacosDataSourceProperties;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
+import com.alibaba.csp.sentinel.datasource.ReadableDataSource;
+import com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
+import java.util.Set;
+
+/**
+ * @Description: 限流规则持久化
+ * @author: bright
+ * @Date: 2020/9/25 13:46
+ */
+@Configuration
+@Order(2)
+public class SentinelPersistenceConfig {
+
+    @Autowired
+    private SentinelProperties sentinelProperties;
+
+    @Bean
+    public SentinelPersistenceConfig init() throws Exception {
+        loadGWFlowRule();
+        return new SentinelPersistenceConfig();
+    }
+
+    private void loadGWFlowRule() {
+        sentinelProperties.getDatasource().entrySet().stream().filter(map -> {
+            return map.getValue().getNacos() != null;
+        }).forEach(map -> {
+            NacosDataSourceProperties nacos = map.getValue().getNacos();
+            ReadableDataSource<String, Set<GatewayFlowRule>> gwFlowRuleDataSource = new NacosDataSource<>(
+                    nacos.getServerAddr(), nacos.getGroupId(), nacos.getDataId(),
+                    source -> JSON.parseObject(source, new TypeReference<Set<GatewayFlowRule>>() {
+                    }));
+            GatewayRuleManager.register2Property(gwFlowRuleDataSource.getProperty());
+        });
+    }
+}

+ 32 - 1
src/main/resources/bootstrap-test.yml

@@ -26,7 +26,38 @@ spring:
         namespace: 4dkankan-test
         username: nacos
         password: nacos
-
+    sentinel:
+      transport:
+        dashboard: localhost:8888
+        heartbeat-interval-ms: 500
+        port: 8719
+      eager: true #取消sentinel控制台懒加载
+      #sentinel配置持久化nacos
+      datasource:
+        #流控规则
+        flow:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-flow-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-test
+            rule-type: flow
+        gw_api_group:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-api-group-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-test
+            rule-type: gw_api_group
+      #配置限流之后的响应内容
+      scg:
+        fallback:
+          # 两种模式:一种是response返回文字提示信息,一种是redirect,重定向跳转,需要同时配置redirect(跳转的uri)
+          mode: response
+          # 响应的状态
+          response-status: 426
+          # 响应体
+          response-body: '{"code": 426,"message": "限流了,稍后重试!"}'
 #management:
 #  endpoints:
 #    web: