diff --git a/novel-author/author-service/pom.xml b/novel-author/author-service/pom.xml
index 7cfd111..559048b 100644
--- a/novel-author/author-service/pom.xml
+++ b/novel-author/author-service/pom.xml
@@ -17,14 +17,6 @@
author-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-book/book-service/pom.xml b/novel-book/book-service/pom.xml
index 2c986d9..6129a29 100644
--- a/novel-book/book-service/pom.xml
+++ b/novel-book/book-service/pom.xml
@@ -22,14 +22,6 @@
user-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-common/pom.xml b/novel-common/pom.xml
index 0ad3b6c..5b9bc66 100644
--- a/novel-common/pom.xml
+++ b/novel-common/pom.xml
@@ -14,11 +14,11 @@
- org.springframework.cloud
+ com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
- org.springframework.cloud
+ com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
diff --git a/novel-file/pom.xml b/novel-file/pom.xml
index 3021f33..d4757e4 100644
--- a/novel-file/pom.xml
+++ b/novel-file/pom.xml
@@ -32,14 +32,6 @@
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-gateway/pom.xml b/novel-gateway/pom.xml
index 7352baa..9d8de25 100644
--- a/novel-gateway/pom.xml
+++ b/novel-gateway/pom.xml
@@ -13,11 +13,11 @@
- org.springframework.cloud
+ com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
- org.springframework.cloud
+ com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
@@ -30,6 +30,15 @@
joda-time
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-sentinel-gateway
+
diff --git a/novel-gateway/src/main/java/com/java2nb/novel/gateway/config/GatewayConfiguration.java b/novel-gateway/src/main/java/com/java2nb/novel/gateway/config/GatewayConfiguration.java
new file mode 100644
index 0000000..b87e6c6
--- /dev/null
+++ b/novel-gateway/src/main/java/com/java2nb/novel/gateway/config/GatewayConfiguration.java
@@ -0,0 +1,128 @@
+package com.java2nb.novel.gateway.config;
+
+import com.alibaba.csp.sentinel.adapter.gateway.common.SentinelGatewayConstants;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPathPredicateItem;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPredicateItem;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayParamFlowItem;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
+import com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter;
+import com.alibaba.csp.sentinel.adapter.gateway.sc.exception.SentinelGatewayBlockExceptionHandler;
+import com.alibaba.csp.sentinel.slots.system.SystemRule;
+import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.codec.ServerCodecConfigurer;
+import org.springframework.web.reactive.result.view.ViewResolver;
+
+import javax.annotation.PostConstruct;
+import java.util.*;
+
+/**
+ * 网关限流配置
+ * @author xiongxiaoyang
+ * @version 1.0
+ * @since 2020/6/7
+ */
+@Configuration
+public class GatewayConfiguration {
+
+ private final List viewResolvers;
+ private final ServerCodecConfigurer serverCodecConfigurer;
+
+ public GatewayConfiguration(ObjectProvider> viewResolversProvider,
+ ServerCodecConfigurer serverCodecConfigurer) {
+ this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
+ this.serverCodecConfigurer = serverCodecConfigurer;
+ }
+
+ @Bean
+ @Order(Ordered.HIGHEST_PRECEDENCE)
+ public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {
+ // Register the block exception handler for Spring Cloud Gateway.
+ return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);
+ }
+
+ @Bean
+ @Order(Ordered.HIGHEST_PRECEDENCE)
+ public GlobalFilter sentinelGatewayFilter() {
+ return new SentinelGatewayFilter();
+ }
+
+ @PostConstruct
+ public void doInit() {
+ // initSystemRule();
+ initCustomizedApis();
+ initGatewayRules();
+ }
+
+ private void initCustomizedApis() {
+ Set definitions = new HashSet<>();
+ ApiDefinition api1 = new ApiDefinition("customized_api")
+ .setPredicateItems(new HashSet() {{
+ add(new ApiPathPredicateItem().setPattern("/api/**")
+ .setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX));
+ }});
+ ApiDefinition api2 = new ApiDefinition("book_content_api")
+ .setPredicateItems(new HashSet() {{
+ add(new ApiPathPredicateItem().setPattern("/api/book/queryBookContent**")
+ .setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX));
+ }});
+ definitions.add(api1);
+ definitions.add(api2);
+ GatewayApiDefinitionManager.loadApiDefinitions(definitions);
+ }
+
+ /**
+ * 系统自适应限流规则
+ * */
+ private void initSystemRule() {
+ List rules = new ArrayList<>();
+ SystemRule rule = new SystemRule();
+ // max load is 3
+ rule.setHighestSystemLoad(3.0);
+ // max cpu usage is 60%
+ rule.setHighestCpuUsage(0.6);
+ // max avg rt of all request is 10 ms
+ rule.setAvgRt(10);
+ // max total qps is 20
+ rule.setQps(20);
+ // max parallel working thread is 10
+ rule.setMaxThread(10);
+
+ rules.add(rule);
+ SystemRuleManager.loadRules(Collections.singletonList(rule));
+ }
+
+ /**
+ * 自定义网关限流规则(反爬虫机制)
+ * 1.对所有api接口通过IP进行限流,每个IP,2秒钟内请求数量大于10,即视为爬虫
+ * 2.对小说内容接口访问进行限流,每个IP,1秒钟请求数量大于1,则视为爬虫
+ * */
+ private void initGatewayRules() {
+ Set rules = new HashSet<>();
+ rules.add(new GatewayFlowRule("customized_api")
+ .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
+ .setCount(10)
+ .setIntervalSec(2)
+ .setParamItem(new GatewayParamFlowItem()
+ .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
+ )
+ );
+ rules.add(new GatewayFlowRule("book_content_api")
+ .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
+ .setCount(1)
+ .setIntervalSec(1)
+ .setParamItem(new GatewayParamFlowItem()
+ .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
+ )
+ );
+ GatewayRuleManager.loadRules(rules);
+ }
+}
diff --git a/novel-gateway/src/main/resources/bootstrap.yml b/novel-gateway/src/main/resources/bootstrap.yml
index fad7bce..c42e031 100644
--- a/novel-gateway/src/main/resources/bootstrap.yml
+++ b/novel-gateway/src/main/resources/bootstrap.yml
@@ -1,3 +1,4 @@
+
spring:
application:
name: novel-gateway
@@ -8,3 +9,6 @@ spring:
file-extension: yml
group: ${spring.application.name}
namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c
+
+ main:
+ allow-bean-definition-overriding: true
\ No newline at end of file
diff --git a/novel-home/pom.xml b/novel-home/pom.xml
index b9f548e..7ecba48 100644
--- a/novel-home/pom.xml
+++ b/novel-home/pom.xml
@@ -21,14 +21,6 @@
news-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-monitor/pom.xml b/novel-monitor/pom.xml
index e234692..932435b 100644
--- a/novel-monitor/pom.xml
+++ b/novel-monitor/pom.xml
@@ -17,11 +17,11 @@
spring-boot-starter-web
- org.springframework.cloud
+ com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
- org.springframework.cloud
+ com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
diff --git a/novel-news/news-service/pom.xml b/novel-news/news-service/pom.xml
index 1dc90fa..288d33a 100644
--- a/novel-news/news-service/pom.xml
+++ b/novel-news/news-service/pom.xml
@@ -18,14 +18,6 @@
news-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-pay/pay-service/pom.xml b/novel-pay/pay-service/pom.xml
index 1d9d65f..b0b8898 100644
--- a/novel-pay/pay-service/pom.xml
+++ b/novel-pay/pay-service/pom.xml
@@ -17,14 +17,6 @@
pay-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-search/pom.xml b/novel-search/pom.xml
index f0db430..259877c 100644
--- a/novel-search/pom.xml
+++ b/novel-search/pom.xml
@@ -17,14 +17,6 @@
book-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/novel-user/user-service/pom.xml b/novel-user/user-service/pom.xml
index 36de874..0764671 100644
--- a/novel-user/user-service/pom.xml
+++ b/novel-user/user-service/pom.xml
@@ -22,14 +22,6 @@
book-api
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
-
org.springframework.cloud
diff --git a/pom.xml b/pom.xml
index c7fd2e9..fed144d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,7 @@
UTF-8
1.8
Hoxton.SR4
+ 2.1.0.RELEASE
0.2.2.RELEASE
2.7.0
true
@@ -132,19 +133,14 @@
import
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
- ${nacos.version}
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
+ pom
+ import
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-config
- ${nacos.version}
-