Commit 36d196a458eb29841067bd57ccc269f6e1229d0a

Authored by miaoguoxin
1 parent 48f40cbd

模块化

Showing 64 changed files with 869 additions and 387 deletions
gateway-business/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <artifactId>xtrade-gateway-service</artifactId>
  7 + <groupId>com.diligrp</groupId>
  8 + <version>1.0.0</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 +
  12 + <artifactId>gateway-business</artifactId>
  13 +
  14 + <dependencies>
  15 + <dependency>
  16 + <artifactId>gateway-core</artifactId>
  17 + <groupId>com.diligrp</groupId>
  18 + </dependency>
  19 +
  20 + </dependencies>
  21 +</project>
0 22 \ No newline at end of file
... ...
src/main/java/com/diligrp/xtrade/gateway/XtradeGatewayApplication.java renamed to gateway-business/src/main/java/com/diligrp/xtrade/business/XtradeGatewayApplication.java
1   -package com.diligrp.xtrade.gateway;
  1 +package com.diligrp.xtrade.business;
2 2  
3 3 import org.mybatis.spring.annotation.MapperScan;
4 4 import org.springframework.boot.SpringApplication;
... ... @@ -6,10 +6,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
6 6 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
7 7 import org.springframework.cloud.context.config.annotation.RefreshScope;
8 8  
9   -@SpringBootApplication
10   -@EnableDiscoveryClient
  9 +
  10 +
11 11 @RefreshScope
12   -@MapperScan(basePackages = {"com.diligrp.xtrade.gateway.repository.dao"})
  12 +@EnableDiscoveryClient
  13 +@MapperScan(basePackages = {"com.diligrp.xtrade.core.repository"})
  14 +@SpringBootApplication(scanBasePackages = {"com.diligrp.xtrade.core","com.diligrp.xtrade.business"})
13 15 public class XtradeGatewayApplication {
14 16  
15 17 public static void main(String[] args) {
... ... @@ -17,3 +19,5 @@ public class XtradeGatewayApplication {
17 19 }
18 20  
19 21 }
  22 +
  23 +
... ...
src/main/java/com/diligrp/xtrade/gateway/application/TestAggregationApplication.java renamed to gateway-business/src/main/java/com/diligrp/xtrade/business/application/TestAggregationApplication.java
1   -package com.diligrp.xtrade.gateway.application;
  1 +package com.diligrp.xtrade.business.application;
2 2  
3   -import com.diligrp.xtrade.gateway.common.annotation.DispatchMapping;
4   -import com.diligrp.xtrade.gateway.domain.TestRequestDto;
5   -import com.diligrp.xtrade.gateway.support.dispatch.DispatchContext;
6   -import com.diligrp.xtrade.gateway.support.dispatch.RequestDispatcher;
7   -import org.springframework.beans.factory.annotation.Autowired;
8   -import org.springframework.http.server.reactive.ServerHttpRequest;
  3 +import com.diligrp.xtrade.business.domain.TestRequestDto;
  4 +import com.diligrp.xtrade.core.common.annotation.DispatchMapping;
  5 +import com.diligrp.xtrade.core.support.dispatch.DispatchContext;
  6 +import com.diligrp.xtrade.core.support.dispatch.RequestDispatcher;
9 7 import org.springframework.stereotype.Component;
10 8 import org.springframework.validation.annotation.Validated;
11 9  
12   -import javax.servlet.http.HttpServletRequest;
13   -
14 10 /**
15 11 * @Auther: miaoguoxin
16 12 * @Date: 2020/4/15 09:40
... ... @@ -21,11 +17,6 @@ import javax.servlet.http.HttpServletRequest;
21 17 @DispatchMapping
22 18 public class TestAggregationApplication {
23 19  
24   - @Autowired
25   - private ServerHttpRequest serverHttpRequest;
26   - @Autowired
27   - private HttpServletRequest httpServletRequest;
28   -
29 20 @DispatchMapping("/test")
30 21 public String test(DispatchContext<TestRequestDto> dispatchContext) {
31 22 return "ffff";
... ...
src/main/java/com/diligrp/xtrade/gateway/controller/TestController.java renamed to gateway-business/src/main/java/com/diligrp/xtrade/business/controller/TestController.java
1   -package com.diligrp.xtrade.gateway.controller;
  1 +package com.diligrp.xtrade.business.controller;
2 2  
3   -import com.diligrp.xtrade.gateway.domain.TestRequestDto;
  3 +import com.diligrp.xtrade.business.domain.TestRequestDto;
4 4 import com.diligrp.xtrade.shared.domain.Message;
5 5 import org.springframework.beans.factory.annotation.Autowired;
6 6 import org.springframework.beans.factory.annotation.Value;
7 7 import org.springframework.cloud.context.config.annotation.RefreshScope;
8 8 import org.springframework.cloud.gateway.config.GatewayProperties;
9   -import org.springframework.cloud.gateway.route.RouteDefinition;
10 9 import org.springframework.validation.annotation.Validated;
11 10 import org.springframework.web.bind.annotation.GetMapping;
12   -import org.springframework.web.bind.annotation.PathVariable;
13 11 import org.springframework.web.bind.annotation.RequestMapping;
14 12 import org.springframework.web.bind.annotation.RestController;
15 13  
16   -import javax.validation.constraints.Min;
17   -import java.util.List;
18   -
19 14 /**
20 15 * @Auther: miaoguoxin
21 16 * @Date: 2020/4/10 16:01
... ...
src/main/java/com/diligrp/xtrade/gateway/domain/TestRequestDto.java renamed to gateway-business/src/main/java/com/diligrp/xtrade/business/domain/TestRequestDto.java
1   -package com.diligrp.xtrade.gateway.domain;
  1 +package com.diligrp.xtrade.business.domain;
2 2  
3 3 import com.fasterxml.jackson.annotation.JsonFormat;
4   -import lombok.Data;
5 4  
6 5 import javax.validation.constraints.NotBlank;
7 6 import java.time.LocalDateTime;
... ... @@ -10,10 +9,25 @@ import java.time.LocalDateTime;
10 9 * @Auther: miaoguoxin
11 10 * @Date: 2020/4/15 15:56
12 11 */
13   -@Data
14 12 public class TestRequestDto {
15 13 @NotBlank(message = "{request.username.not.blank}")
16 14 private String username;
17 15 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
18 16 private LocalDateTime localDateTime;
  17 +
  18 + public String getUsername() {
  19 + return username;
  20 + }
  21 +
  22 + public void setUsername(String username) {
  23 + this.username = username;
  24 + }
  25 +
  26 + public LocalDateTime getLocalDateTime() {
  27 + return localDateTime;
  28 + }
  29 +
  30 + public void setLocalDateTime(LocalDateTime localDateTime) {
  31 + this.localDateTime = localDateTime;
  32 + }
19 33 }
... ...
src/main/resources/ValidationMessages.properties renamed to gateway-business/src/main/resources/ValidationMessages.properties
src/main/resources/ValidationMessages_zh_CN.properties renamed to gateway-business/src/main/resources/ValidationMessages_zh_CN.properties
src/main/resources/banner2.txt renamed to gateway-business/src/main/resources/banner2.txt
gateway-business/src/main/resources/bootstrap-dev.yml 0 → 100644
  1 +spring:
  2 + cloud:
  3 + nacos:
  4 + discovery:
  5 + username: nacos
  6 + password: microtest
  7 + server-addr: apitest.51shiban.com:80/n
  8 + namespace: c86d8673-4d0a-469f-8bb8-1434c57c236c
  9 + config:
  10 + username: nacos
  11 + password: microtest
  12 + server-addr: apitest.51shiban.com:80/n
  13 + namespace: c86d8673-4d0a-469f-8bb8-1434c57c236c
... ...
src/main/resources/bootstrap-gateway-tempalte.yml renamed to gateway-business/src/main/resources/bootstrap-gateway-tempalte.yml
src/main/resources/bootstrap.yml renamed to gateway-business/src/main/resources/bootstrap.yml
... ... @@ -22,4 +22,4 @@ mybatis:
22 22 config-location: classpath:/mybatis-config.xml
23 23 xtrade:
24 24 gateway-loader: cloud
25   - aggregation-scan-packages: com.diligrp.xtrade.gateway.application
  25 + aggregation-scan-packages: com.diligrp.xtrade.business.application
... ...
src/main/resources/ehcache.xml renamed to gateway-business/src/main/resources/ehcache.xml
src/main/resources/mybatis-config.xml renamed to gateway-business/src/main/resources/mybatis-config.xml
gateway-core/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <artifactId>xtrade-gateway-service</artifactId>
  7 + <groupId>com.diligrp</groupId>
  8 + <version>1.0.0</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 +
  12 + <artifactId>gateway-core</artifactId>
  13 +
  14 + <dependencies>
  15 + <dependency>
  16 + <groupId>com.diligrp</groupId>
  17 + <artifactId>xtrade-shared-spring-boot-starter</artifactId>
  18 + </dependency>
  19 + <dependency>
  20 + <groupId>org.springframework.cloud</groupId>
  21 + <artifactId>spring-cloud-starter-gateway</artifactId>
  22 + </dependency>
  23 +
  24 + <dependency>
  25 + <groupId>com.alibaba.cloud</groupId>
  26 + <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  27 + </dependency>
  28 + <dependency>
  29 + <groupId>com.alibaba.cloud</groupId>
  30 + <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  31 + </dependency>
  32 + <dependency>
  33 + <groupId>com.alibaba.nacos</groupId>
  34 + <artifactId>nacos-api</artifactId>
  35 + </dependency>
  36 + <dependency>
  37 + <groupId>com.alibaba.nacos</groupId>
  38 + <artifactId>nacos-client</artifactId>
  39 + </dependency>
  40 + <dependency>
  41 + <groupId>org.springframework.boot</groupId>
  42 + <artifactId>spring-boot-starter-test</artifactId>
  43 + <scope>test</scope>
  44 + </dependency>
  45 + <dependency>
  46 + <groupId>org.reflections</groupId>
  47 + <artifactId>reflections</artifactId>
  48 + </dependency>
  49 + <dependency>
  50 + <groupId>org.mybatis.spring.boot</groupId>
  51 + <artifactId>mybatis-spring-boot-starter</artifactId>
  52 + </dependency>
  53 + <dependency>
  54 + <groupId>org.springframework.boot</groupId>
  55 + <artifactId>spring-boot-starter-data-redis</artifactId>
  56 + </dependency>
  57 + <dependency>
  58 + <groupId>org.apache.commons</groupId>
  59 + <artifactId>commons-pool2</artifactId>
  60 + </dependency>
  61 + </dependencies>
  62 +</project>
0 63 \ No newline at end of file
... ...
gateway-core/src/main/java/com/diligrp/xtrade/core/api/Api.java 0 → 100644
  1 +package com.diligrp.xtrade.core.api;
  2 +
  3 +
  4 +import java.io.Serializable;
  5 +
  6 +/**
  7 + * @Auther: miaoguoxin
  8 + * @Date: 2019/3/31 16:24
  9 + * @Description: 只用于网关api缓存的对象
  10 + */
  11 +public class Api implements Serializable {
  12 + /**服务名称*/
  13 + private String serviceId;
  14 +
  15 + private String patternUrl;
  16 + //并发量
  17 + private int replenishRate = 2;
  18 + //容量
  19 + private int burstCapacity = 5;
  20 +
  21 + private Integer state;
  22 +
  23 + public String getServiceId() {
  24 + return serviceId;
  25 + }
  26 +
  27 + public void setServiceId(String serviceId) {
  28 + this.serviceId = serviceId;
  29 + }
  30 +
  31 + public String getPatternUrl() {
  32 + return patternUrl;
  33 + }
  34 +
  35 + public void setPatternUrl(String patternUrl) {
  36 + this.patternUrl = patternUrl;
  37 + }
  38 +
  39 + public int getReplenishRate() {
  40 + return replenishRate;
  41 + }
  42 +
  43 + public void setReplenishRate(int replenishRate) {
  44 + this.replenishRate = replenishRate;
  45 + }
  46 +
  47 + public int getBurstCapacity() {
  48 + return burstCapacity;
  49 + }
  50 +
  51 + public void setBurstCapacity(int burstCapacity) {
  52 + this.burstCapacity = burstCapacity;
  53 + }
  54 +
  55 + public Integer getState() {
  56 + return state;
  57 + }
  58 +
  59 + public void setState(Integer state) {
  60 + this.state = state;
  61 + }
  62 +}
... ...
src/main/java/com/diligrp/xtrade/gateway/api/ApiManager.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/api/ApiManager.java
1   -package com.diligrp.xtrade.gateway.api;
  1 +package com.diligrp.xtrade.core.api;
2 2  
3   -import com.diligrp.xtrade.gateway.config.property.AuthPathProperties;
  3 +import com.diligrp.xtrade.core.config.property.AuthPathProperties;
4 4 import org.springframework.beans.factory.annotation.Autowired;
5 5 import org.springframework.http.server.PathContainer;
6 6 import org.springframework.stereotype.Component;
... ...
src/main/java/com/diligrp/xtrade/gateway/common/annotation/DispatchMapping.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/annotation/DispatchMapping.java
1   -package com.diligrp.xtrade.gateway.common.annotation;
  1 +package com.diligrp.xtrade.core.common.annotation;
2 2  
3 3 import java.lang.annotation.Documented;
4 4 import java.lang.annotation.ElementType;
... ...
src/main/java/com/diligrp/xtrade/gateway/common/constant/GatewayAttrType.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/constant/GatewayAttrType.java
1   -package com.diligrp.xtrade.gateway.common.constant;
  1 +package com.diligrp.xtrade.core.common.constant;
2 2  
3 3 import com.diligrp.xtrade.shared.type.IEnumType;
4 4  
... ...
src/main/java/com/diligrp/xtrade/gateway/common/constant/GatewayConst.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/constant/GatewayConst.java
1   -package com.diligrp.xtrade.gateway.common.constant;
  1 +package com.diligrp.xtrade.core.common.constant;
2 2  
3 3 import java.util.concurrent.atomic.AtomicBoolean;
4 4  
... ... @@ -10,10 +10,13 @@ import java.util.concurrent.atomic.AtomicBoolean;
10 10 public class GatewayConst {
11 11 /**用于标记聚合服务mapping是否已经初始化(防止重复加载)*/
12 12 public static final AtomicBoolean HAS_INIT_MAPPING = new AtomicBoolean(false);
  13 + /*webExchange中保存的属性*/
13 14 /**请求体缓存Key*/
14   - public static final String CACHE_REQUEST_BODY_OBJECT_KEY = "cachedRequestBodyObj";
15   - /**缓存Api配置key*/
16   - public static final String CACHE_API_OBJECT_KEY = "cachedApiConfigObject";
  15 + public static final String CACHED_REQUEST_BODY_STR_ATTR = "cachedRequestBodyStr";
  16 + /**网关异常记录*/
  17 + public static final String GATEWAY_EXCEPTION_ATTR = "gatewayException";
  18 + /**响应体缓存记录*/
  19 + public static final String CACHED_RESPONSE_BODY_STR_ATTR = "cachedResponseBodyStr";
17 20  
18 21 /* 自定义的过滤器顺序都从100开始(除ResponseBodyRead),避免顺序问题*/
19 22 /**缓存请求体过滤器*/
... ...
src/main/java/com/diligrp/xtrade/gateway/common/utils/CacheUtils.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/utils/CacheUtils.java
src/main/java/com/diligrp/xtrade/gateway/common/utils/PathUtils.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/utils/PathUtils.java
1   -package com.diligrp.xtrade.gateway.common.utils;
  1 +package com.diligrp.xtrade.core.common.utils;
2 2  
3 3 import org.springframework.http.server.PathContainer;
4 4 import org.springframework.util.CollectionUtils;
... ...
src/main/java/com/diligrp/xtrade/gateway/common/utils/ResponseUtils.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/utils/ResponseUtils.java
1   -package com.diligrp.xtrade.gateway.common.utils;
  1 +package com.diligrp.xtrade.core.common.utils;
2 2  
3 3 import com.diligrp.xtrade.shared.domain.Message;
4 4 import com.diligrp.xtrade.shared.util.JsonUtils;
... ...
src/main/java/com/diligrp/xtrade/gateway/common/utils/ValidateUtils.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/common/utils/ValidateUtils.java
1   -package com.diligrp.xtrade.gateway.common.utils;
  1 +package com.diligrp.xtrade.core.common.utils;
2 2  
3   -import com.diligrp.xtrade.gateway.exception.GatewayParamNotValidException;
  3 +import com.diligrp.xtrade.core.exception.GatewayParamNotValidException;
4 4 import org.springframework.beans.factory.annotation.Autowired;
5 5 import org.springframework.stereotype.Component;
6 6  
... ...
src/main/java/com/diligrp/xtrade/gateway/config/CacheManagerConfiguration.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/config/CacheManagerConfiguration.java
src/main/java/com/diligrp/xtrade/gateway/config/ExceptionConfiguration.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/config/ExceptionConfiguration.java
1   -package com.diligrp.xtrade.gateway.config;
  1 +package com.diligrp.xtrade.core.config;
2 2  
3   -import com.diligrp.xtrade.gateway.exception.GlobalGatewayErrorHandler;
  3 +import com.diligrp.xtrade.core.exception.GlobalGatewayErrorHandler;
4 4 import org.springframework.beans.factory.ObjectProvider;
5 5 import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
6 6 import org.springframework.context.annotation.Bean;
... ...
src/main/java/com/diligrp/xtrade/gateway/config/GatewayResourceLoaderConfiguration.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/config/GatewayResourceLoaderConfiguration.java
1   -package com.diligrp.xtrade.gateway.config;
  1 +package com.diligrp.xtrade.core.config;
2 2  
3 3 import com.alibaba.cloud.nacos.NacosConfigProperties;
4 4 import com.alibaba.nacos.api.NacosFactory;
5 5 import com.alibaba.nacos.api.PropertyKeyConst;
6 6 import com.alibaba.nacos.api.config.ConfigService;
7 7 import com.alibaba.nacos.api.exception.NacosException;
8   -import com.diligrp.xtrade.gateway.exception.GatewayServiceException;
9   -import com.diligrp.xtrade.gateway.route.DynamicRouteLoaderIntf;
10   -import com.diligrp.xtrade.gateway.route.impl.CloudRouteResourceLoader;
11   -import com.diligrp.xtrade.gateway.route.impl.MysqlRouteResourceLoader;
  8 +import com.diligrp.xtrade.core.exception.GatewayRouteResourceException;
  9 +import com.diligrp.xtrade.core.route.DynamicRouteLoaderIntf;
  10 +import com.diligrp.xtrade.core.route.impl.CloudRouteResourceLoader;
  11 +import com.diligrp.xtrade.core.route.impl.MysqlRouteResourceLoader;
12 12 import org.apache.logging.log4j.util.Strings;
13 13 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
14 14 import org.springframework.context.annotation.Bean;
... ... @@ -40,7 +40,7 @@ public class GatewayResourceLoaderConfiguration {
40 40 try {
41 41 configService = NacosFactory.createConfigService(properties);
42 42 } catch (NacosException e) {
43   - throw new GatewayServiceException("init nacos configService failed", e);
  43 + throw new GatewayRouteResourceException("init nacos configService failed", e);
44 44 }
45 45 return configService;
46 46 }
... ...
src/main/java/com/diligrp/xtrade/gateway/config/property/AuthPathProperties.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/config/property/AuthPathProperties.java
1   -package com.diligrp.xtrade.gateway.config.property;
  1 +package com.diligrp.xtrade.core.config.property;
2 2  
3   -import com.diligrp.xtrade.gateway.common.utils.PathUtils;
4   -import lombok.Data;
  3 +import com.diligrp.xtrade.core.common.utils.PathUtils;
5 4 import org.springframework.boot.context.properties.ConfigurationProperties;
6 5 import org.springframework.stereotype.Component;
7 6 import org.springframework.web.util.pattern.PathPattern;
... ... @@ -14,7 +13,6 @@ import java.util.List;
14 13 */
15 14 @Component
16 15 @ConfigurationProperties(prefix = "xtrade.auth")
17   -@Data
18 16 public class AuthPathProperties {
19 17 /**不需要校验权限的path*/
20 18 private String[] excludePaths;
... ... @@ -33,4 +31,11 @@ public class AuthPathProperties {
33 31 }
34 32  
35 33  
  34 + public String[] getExcludePaths() {
  35 + return excludePaths;
  36 + }
  37 +
  38 + public List<PathPattern> getExcludePathPatterns() {
  39 + return excludePathPatterns;
  40 + }
36 41 }
... ...
src/main/java/com/diligrp/xtrade/gateway/config/property/DispatchProperties.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/config/property/DispatchProperties.java
1   -package com.diligrp.xtrade.gateway.config.property;
  1 +package com.diligrp.xtrade.core.config.property;
2 2  
3   -import lombok.Data;
4 3 import org.springframework.boot.context.properties.ConfigurationProperties;
5 4 import org.springframework.stereotype.Component;
6 5  
... ... @@ -10,7 +9,6 @@ import org.springframework.stereotype.Component;
10 9 */
11 10 @Component
12 11 @ConfigurationProperties(prefix = "xtrade")
13   -@Data
14 12 public class DispatchProperties {
15 13 /** 扫描包路径 */
16 14 private String[] aggregationScanPackages;
... ... @@ -18,4 +16,12 @@ public class DispatchProperties {
18 16 public DispatchProperties(String[] aggregationScanPackages) {
19 17 this.aggregationScanPackages = aggregationScanPackages;
20 18 }
  19 +
  20 + public String[] getAggregationScanPackages() {
  21 + return aggregationScanPackages;
  22 + }
  23 +
  24 + public void setAggregationScanPackages(String[] aggregationScanPackages) {
  25 + this.aggregationScanPackages = aggregationScanPackages;
  26 + }
21 27 }
... ...
gateway-core/src/main/java/com/diligrp/xtrade/core/exception/GatewayDispatchException.java 0 → 100644
  1 +package com.diligrp.xtrade.core.exception;
  2 +
  3 +import com.diligrp.xtrade.core.support.dispatch.RequestDispatcher;
  4 +
  5 +/**
  6 + * @Auther: miaoguoxin
  7 + * @Date: 2020/4/18 19:43
  8 + * @Description: 用于操作聚合服务分发
  9 + * {@link RequestDispatcher}
  10 + */
  11 +public class GatewayDispatchException extends RuntimeException {
  12 + public GatewayDispatchException(String message) {
  13 + super(message);
  14 + }
  15 +
  16 + public GatewayDispatchException(String message, Throwable cause) {
  17 + super(message, cause);
  18 + }
  19 +
  20 + public GatewayDispatchException(Throwable cause) {
  21 + super(cause);
  22 + }
  23 +}
... ...
src/main/java/com/diligrp/xtrade/gateway/exception/GatewayParamNotValidException.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/exception/GatewayParamNotValidException.java
1   -package com.diligrp.xtrade.gateway.exception;
  1 +package com.diligrp.xtrade.core.exception;
2 2  
3 3 /**
4 4 * @Auther: miaoguoxin
... ...
src/main/java/com/diligrp/xtrade/gateway/exception/GatewayServiceException.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/exception/GatewayRouteResourceException.java
1   -package com.diligrp.xtrade.gateway.exception;
  1 +package com.diligrp.xtrade.core.exception;
2 2  
3   -import lombok.Getter;
4 3  
5 4 /**
6 5 * @Auther: miaoguoxin
7 6 * @Date: 2020/4/10 11:28
8 7 * @Description:
9 8 */
10   -@Getter
11   -public class GatewayServiceException extends RuntimeException {
  9 +public class GatewayRouteResourceException extends RuntimeException {
12 10 private Object[] args;
13 11  
14   - public GatewayServiceException() {
  12 + public GatewayRouteResourceException() {
15 13 }
16 14  
17   - public GatewayServiceException(String message) {
  15 + public GatewayRouteResourceException(String message) {
18 16 super(message);
19 17 }
20 18  
21   - public GatewayServiceException(String message, Object[] args) {
  19 + public GatewayRouteResourceException(String message, Object[] args) {
22 20 super(message);
23 21 this.args = args;
24 22 }
25 23  
26   - public GatewayServiceException(String message, Throwable cause, Object[] args) {
  24 + public GatewayRouteResourceException(String message, Throwable cause, Object[] args) {
27 25 super(message, cause);
28 26 this.args = args;
29 27 }
30 28  
31   - public GatewayServiceException(Throwable cause, Object[] args) {
  29 + public GatewayRouteResourceException(Throwable cause, Object[] args) {
32 30 super(cause);
33 31 this.args = args;
34 32 }
35 33  
36   - public GatewayServiceException(String message, Throwable cause) {
  34 + public GatewayRouteResourceException(String message, Throwable cause) {
37 35 super(message, cause);
38 36 }
39 37  
40   - public GatewayServiceException(Throwable cause) {
  38 + public GatewayRouteResourceException(Throwable cause) {
41 39 super(cause);
42 40 }
43 41  
44 42  
  43 + public Object[] getArgs() {
  44 + return args;
  45 + }
45 46 }
... ...
src/main/java/com/diligrp/xtrade/gateway/exception/GlobalGatewayErrorHandler.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/exception/GlobalGatewayErrorHandler.java
1   -package com.diligrp.xtrade.gateway.exception;
  1 +package com.diligrp.xtrade.core.exception;
2 2  
3   -import com.alibaba.fastjson.JSON;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
4 4 import com.diligrp.xtrade.shared.domain.Message;
5   -import lombok.extern.slf4j.Slf4j;
  5 +import com.diligrp.xtrade.shared.type.ErrorCode;
  6 +import com.diligrp.xtrade.shared.util.JsonUtils;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
6 9 import org.springframework.beans.factory.annotation.Autowired;
7 10 import org.springframework.boot.web.reactive.error.ErrorAttributes;
8 11 import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
9   -import org.springframework.cloud.gateway.support.NotFoundException;
10 12 import org.springframework.http.HttpStatus;
11 13 import org.springframework.http.MediaType;
12 14 import org.springframework.http.codec.HttpMessageReader;
... ... @@ -24,17 +26,17 @@ import org.springframework.web.server.ServerWebExchange;
24 26 import reactor.core.publisher.Mono;
25 27  
26 28 import java.util.Collections;
27   -import java.util.HashMap;
28 29 import java.util.List;
29 30 import java.util.Map;
30 31  
  32 +
31 33 /**
32 34 * @Auther: miaoguoxin
33 35 * @Date: 2020/04/13 10:55
34 36 * @Description: 处理网关本身抛出的异常
35 37 */
36   -@Slf4j
37 38 public class GlobalGatewayErrorHandler implements ErrorWebExceptionHandler {
  39 + private static final Logger log = LoggerFactory.getLogger(GlobalGatewayErrorHandler.class);
38 40 @Autowired
39 41 private ErrorAttributes errorAttributes;
40 42 /**
... ... @@ -89,51 +91,51 @@ public class GlobalGatewayErrorHandler implements ErrorWebExceptionHandler {
89 91 if (exchange.getResponse().isCommitted()) {
90 92 return Mono.error(ex);
91 93 }
92   - errorAttributes.storeErrorInformation(ex,exchange);
  94 + errorAttributes.storeErrorInformation(ex, exchange);
93 95 ServerRequest newRequest = ServerRequest.create(exchange, this.messageReaders);
94   - return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse).route(newRequest)
  96 + return RouterFunctions
  97 + .route(RequestPredicates.all(), request1 -> renderErrorResponse(request1, exchange))
  98 + .route(newRequest)
95 99 .switchIfEmpty(Mono.error(ex))
96 100 .flatMap((handler) -> handler.handle(newRequest))
97 101 .flatMap((response) -> write(exchange, response));
98 102 }
99 103  
100   - private HttpStatus getHttpStatus(Throwable ex) {
101   - HttpStatus httpStatus;
102   - if (ex instanceof NotFoundException) {
103   - httpStatus = HttpStatus.NOT_FOUND;
104   - } else if (ex instanceof ResponseStatusException) {
105   - ResponseStatusException responseStatusException = (ResponseStatusException) ex;
106   - httpStatus = responseStatusException.getStatus();
107   - } else {
108   - httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
109   - }
110   - return httpStatus;
111   - }
112   -
113   - private Map<String, Object> getHttpResult(HttpStatus httpStatus) {
114   - Message<String> apiResult= Message.failure(httpStatus.value(),httpStatus.toString());
115   - Map<String,Object> result=new HashMap<>();
116   - result.put("httpStatus",httpStatus);
117   - result.put("body", JSON.toJSONString(apiResult));
118   - return result;
119   - }
120 104  
121 105 /**
122 106 * 参考DefaultErrorWebExceptionHandler
123 107 */
124   - private Mono<ServerResponse> renderErrorResponse(ServerRequest request) {
125   - Map<String, Object> errorAttrs = errorAttributes.getErrorAttributes(request, true);
126   - String msg = String.format("%s %s",
127   - errorAttrs.get("path"), errorAttrs.get("error"));
128   - Message<Object> message = Message.failure((int)errorAttrs.get("status"),msg);
129   - if (message.getCode().equals(500)){
130   - log.error("[全局异常处理]异常请求路径:{},记录异常信息:{}", errorAttrs.get("path"),errorAttributes.getError(request));
131   - }
  108 + private Mono<ServerResponse> renderErrorResponse(ServerRequest request, ServerWebExchange exchange) {
  109 + Throwable error = errorAttributes.getError(request);
  110 + Message<Object> message = handleException(error);
  111 + exchange.getAttributes().putIfAbsent(GatewayConst.GATEWAY_EXCEPTION_ATTR, error);
  112 + exchange.getAttributes().putIfAbsent(GatewayConst.CACHED_RESPONSE_BODY_STR_ATTR, JsonUtils.toJsonString(message));
132 113 return ServerResponse.status(HttpStatus.OK)
133 114 .contentType(MediaType.APPLICATION_JSON)
134 115 .body(BodyInserters.fromValue(message));
135 116 }
136 117  
  118 + private static Message<Object> handleException(Throwable ex) {
  119 + if (ex instanceof GatewayDispatchException) {
  120 + GatewayDispatchException dispatchEx = (GatewayDispatchException) ex;
  121 + if (dispatchEx.getCause() != null) {
  122 + return handleException(dispatchEx.getCause());
  123 + } else {
  124 + return Message.failure(
  125 + ErrorCode.UNKNOWN_ERROR.getCode(), ErrorCode.UNKNOWN_ERROR.getName());
  126 + }
  127 + } else if (ex instanceof ResponseStatusException) {
  128 + int statusCode = ((ResponseStatusException) ex).getStatus().value();
  129 + return Message.failure(statusCode, ex.getMessage());
  130 + } else if (ex instanceof GatewayParamNotValidException) {
  131 + return Message.failure(
  132 + ErrorCode.ILLEGAL_PARAMS.getCode(), ex.getMessage());
  133 + } else {
  134 + return Message.failure(
  135 + ErrorCode.UNKNOWN_ERROR.getCode(), ErrorCode.UNKNOWN_ERROR.getName());
  136 + }
  137 + }
  138 +
137 139 /**
138 140 * 参考AbstractErrorWebExceptionHandler
139 141 */
... ...
src/main/java/com/diligrp/xtrade/gateway/filters/factory/DispatchGatewayFilterFactory.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/filters/factory/DispatchGatewayFilterFactory.java
1   -package com.diligrp.xtrade.gateway.filters.factory;
  1 +package com.diligrp.xtrade.core.filters.factory;
2 2  
3   -import com.diligrp.xtrade.gateway.common.constant.GatewayConst;
4   -import com.diligrp.xtrade.gateway.common.utils.ResponseUtils;
5   -import com.diligrp.xtrade.gateway.support.dispatch.RequestDispatcher;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  4 +import com.diligrp.xtrade.core.common.utils.ResponseUtils;
  5 +import com.diligrp.xtrade.core.support.dispatch.RequestDispatcher;
6 6 import com.diligrp.xtrade.shared.domain.Message;
7   -import lombok.Data;
8 7 import org.springframework.beans.factory.annotation.Autowired;
9 8 import org.springframework.cloud.gateway.filter.GatewayFilter;
10 9 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
... ... @@ -15,7 +14,8 @@ import org.springframework.stereotype.Component;
15 14 import org.springframework.web.server.ServerWebExchange;
16 15 import reactor.core.publisher.Mono;
17 16  
18   -import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.CACHE_REQUEST_BODY_OBJECT_KEY;
  17 +import java.util.concurrent.ConcurrentLinkedQueue;
  18 +
19 19 import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR;
20 20  
21 21 /**
... ... @@ -25,6 +25,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.O
25 25 */
26 26 @Component
27 27 public class DispatchGatewayFilterFactory extends AbstractGatewayFilterFactory<DispatchGatewayFilterFactory.Config> {
  28 +
28 29 @Autowired
29 30 private RequestDispatcher requestDispatcher;
30 31  
... ... @@ -47,8 +48,8 @@ public class DispatchGatewayFilterFactory extends AbstractGatewayFilterFactory&lt;D
47 48 @Override
48 49 public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
49 50 String rawPath = exchange.getRequest().getURI().getRawPath();
50   - String paramsJson = exchange.getAttribute(CACHE_REQUEST_BODY_OBJECT_KEY);
51   - Message message = requestDispatcher.executeMethod(rawPath, paramsJson, exchange);
  51 + String paramsJson = exchange.getAttribute(GatewayConst.CACHED_REQUEST_BODY_STR_ATTR);
  52 + Message<Object> message = requestDispatcher.executeMethod(rawPath, paramsJson, exchange);
52 53 //throw new RuntimeException("gggg");
53 54 exchange.getAttributes().put(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR, MediaType.APPLICATION_JSON_VALUE);
54 55 return ResponseUtils.writeResponse(exchange.getResponse(),message);
... ... @@ -61,7 +62,6 @@ public class DispatchGatewayFilterFactory extends AbstractGatewayFilterFactory&lt;D
61 62 }
62 63  
63 64  
64   - @Data
65 65 public static class Config {
66 66 }
67 67  
... ...
src/main/java/com/diligrp/xtrade/gateway/filters/global/AuthGlobalFilter.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/filters/global/AuthGlobalFilter.java
1   -package com.diligrp.xtrade.gateway.filters.global;
  1 +package com.diligrp.xtrade.core.filters.global;
2 2  
3   -import com.diligrp.xtrade.gateway.api.ApiManager;
4   -import com.diligrp.xtrade.gateway.common.utils.ResponseUtils;
5   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.api.ApiManager;
  4 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  5 +import com.diligrp.xtrade.core.common.utils.ResponseUtils;
6 6 import org.springframework.beans.factory.annotation.Autowired;
7 7 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
8 8 import org.springframework.cloud.gateway.filter.GlobalFilter;
  9 +import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
9 10 import org.springframework.core.Ordered;
10 11 import org.springframework.http.MediaType;
11 12 import org.springframework.http.server.reactive.ServerHttpResponse;
... ... @@ -17,9 +18,6 @@ import java.net.URI;
17 18 import java.util.LinkedHashSet;
18 19 import java.util.Optional;
19 20  
20   -import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.AUTH_FILTER_ORDER;
21   -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR;
22   -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR;
23 21  
24 22 /**
25 23 * @Auther: miaoguoxin
... ... @@ -27,7 +25,6 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.O
27 25 * @Description: 用于权限操作
28 26 */
29 27 @Component
30   -@Slf4j
31 28 public class AuthGlobalFilter implements GlobalFilter, Ordered {
32 29 @Autowired
33 30 private ApiManager apiManager;
... ... @@ -38,15 +35,15 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
38 35 ServerHttpResponse response = exchange.getResponse();
39 36 //排除在外的Uri跳过权限
40 37 if (apiManager.isExcludePathMatch(originalUri)) {
41   - // return chain.filter(exchange);
42   - throw new RuntimeException("异常测试");
  38 + return chain.filter(exchange);
  39 + // throw new RuntimeException("异常测试");
43 40 }
44   - exchange.getAttributes().put(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR, MediaType.APPLICATION_JSON_VALUE);
  41 + exchange.getAttributes().put(ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR, MediaType.APPLICATION_JSON_VALUE);
45 42 return ResponseUtils.writeForbidden(response);
46 43 }
47 44  
48 45 private static String getOriginalUri(ServerWebExchange exchange) {
49   - LinkedHashSet<URI> uris = exchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
  46 + LinkedHashSet<URI> uris = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
50 47 return Optional.ofNullable(uris)
51 48 .flatMap(us -> us.stream().findFirst().map(URI::getRawPath))
52 49 .orElse(exchange.getRequest().getURI().getRawPath());
... ... @@ -54,7 +51,7 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
54 51  
55 52 @Override
56 53 public int getOrder() {
57   - return AUTH_FILTER_ORDER;
  54 + return GatewayConst.AUTH_FILTER_ORDER;
58 55 }
59 56  
60 57 }
... ...
src/main/java/com/diligrp/xtrade/gateway/filters/global/CacheRequestBodyGlobalFilter.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/filters/global/CacheRequestBodyGlobalFilter.java
1   -package com.diligrp.xtrade.gateway.filters.global;
  1 +package com.diligrp.xtrade.core.filters.global;
2 2  
3   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
4 4 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
5 5 import org.springframework.cloud.gateway.filter.GlobalFilter;
6 6 import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage;
... ... @@ -24,8 +24,6 @@ import reactor.core.publisher.Mono;
24 24  
25 25 import java.util.List;
26 26  
27   -import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.CACHE_BODY_FILTER_ORDER;
28   -import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.CACHE_REQUEST_BODY_OBJECT_KEY;
29 27  
30 28 /**
31 29 * @Auther: miaoguoxin
... ... @@ -34,7 +32,6 @@ import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.CACHE_REQU
34 32 * {@link ModifyRequestBodyGatewayFilterFactory}
35 33 */
36 34 @Component
37   -@Slf4j
38 35 public class CacheRequestBodyGlobalFilter implements GlobalFilter, Ordered {
39 36 private static final List<HttpMessageReader<?>> messageReaders = HandlerStrategies
40 37 .withDefaults().messageReaders();
... ... @@ -45,7 +42,7 @@ public class CacheRequestBodyGlobalFilter implements GlobalFilter, Ordered {
45 42 messageReaders);
46 43 Mono<String> modifiedBody = serverRequest.bodyToMono(String.class)
47 44 .flatMap(body -> {
48   - exchange.getAttributes().put(CACHE_REQUEST_BODY_OBJECT_KEY, body);
  45 + exchange.getAttributes().put(GatewayConst.CACHED_REQUEST_BODY_STR_ATTR, body);
49 46 return Mono.just(body);
50 47 });
51 48  
... ... @@ -91,7 +88,7 @@ public class CacheRequestBodyGlobalFilter implements GlobalFilter, Ordered {
91 88  
92 89 @Override
93 90 public int getOrder() {
94   - return CACHE_BODY_FILTER_ORDER;
  91 + return GatewayConst.CACHE_BODY_FILTER_ORDER;
95 92 }
96 93  
97 94 }
... ...
src/main/java/com/diligrp/xtrade/gateway/filters/global/ResponseReadBodyGlobalFilter.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/filters/global/ResponseReadBodyGlobalFilter.java
1   -package com.diligrp.xtrade.gateway.filters.global ;
  1 +package com.diligrp.xtrade.core.filters.global;
2 2  
3   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  4 +import com.diligrp.xtrade.core.support.dispatch.MappingRegister;
4 5 import org.reactivestreams.Publisher;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
5 8 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
6 9 import org.springframework.cloud.gateway.filter.GlobalFilter;
7 10 import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
... ... @@ -27,16 +30,18 @@ import java.util.List;
27 30 import java.util.Objects;
28 31 import java.util.function.BiFunction;
29 32  
  33 +import static com.diligrp.xtrade.core.common.constant.GatewayConst.CACHED_RESPONSE_BODY_STR_ATTR;
30 34 import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR;
31 35  
32   -/*
  36 +/**
33 37 * @auther: miaoguoxin
34 38 * @date: 2018/12/26 21:26
35 39 * @description: 读取响应体过滤器
36 40 */
37 41 @Component
38   -@Slf4j
39 42 public class ResponseReadBodyGlobalFilter implements GlobalFilter, Ordered {
  43 + private static final Logger log = LoggerFactory.getLogger(MappingRegister.class);
  44 +
40 45 private final List<HttpMessageReader<?>> messageReaders;
41 46  
42 47 public ResponseReadBodyGlobalFilter() {
... ... @@ -78,11 +83,7 @@ public class ResponseReadBodyGlobalFilter implements GlobalFilter, Ordered {
78 83 //打印返回响应日志
79 84 log.debug("[Trace:{}]-gateway response:ct=[{}], status=[{}],headers=[{}],body=[{}]",
80 85 trace, System.currentTimeMillis() - startTime, resp.getStatusCode(), resp.getHeaders(), respBody);
81   -// String errRespString = this.getErrRespString(resp.getStatusCode());
82   -// if (!Strings.isNullOrEmpty(errRespString)) {
83   -// resp.setStatusCode(HttpStatus.OK);
84   -// respBody = errRespString;
85   -// }
  86 + exchange.getAttributes().putIfAbsent(CACHED_RESPONSE_BODY_STR_ATTR,respBody);
86 87 HttpHeaders headers = resp.getHeaders();
87 88 //特别声明:响应体改变必须设置contentLength,且长度要保持一致,(经过测试,如果过短则会截断,过长则会导致超时。)
88 89 headers.setContentLength(respBody.getBytes(StandardCharsets.UTF_8).length);
... ...
src/main/java/com/diligrp/xtrade/gateway/filters/web/ReactiveContextWebFilter.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/filters/web/ReactiveContextWebFilter.java
1   -package com.diligrp.xtrade.gateway.filters.web;
  1 +package com.diligrp.xtrade.core.filters.web;
2 2  
3   -import com.diligrp.xtrade.gateway.support.context.ReactiveExchangeContextHolder;
4   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  4 +import com.diligrp.xtrade.core.support.ApiMetricsCollector;
  5 +import com.diligrp.xtrade.core.support.ApiMetricsInfo;
  6 +import com.diligrp.xtrade.core.support.context.ReactiveExchangeContextHolder;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
5 9 import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
6 10 import org.springframework.http.server.reactive.ServerHttpRequest;
7 11 import org.springframework.stereotype.Component;
... ... @@ -10,6 +14,7 @@ import org.springframework.web.server.WebFilter;
10 14 import org.springframework.web.server.WebFilterChain;
11 15 import reactor.core.publisher.Mono;
12 16  
  17 +
13 18 /**
14 19 * @Auther: miaoguoxin
15 20 * @Date: 2020/4/16 09:17
... ... @@ -17,11 +22,12 @@ import reactor.core.publisher.Mono;
17 22 */
18 23 @Component
19 24 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
20   -@Slf4j
21 25 public class ReactiveContextWebFilter implements WebFilter {
  26 + private static final Logger log = LoggerFactory.getLogger(ReactiveContextWebFilter.class);
  27 +
22 28 @Override
23 29 public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
24   - long l = System.currentTimeMillis();
  30 + long startTime = System.currentTimeMillis();
25 31 ServerHttpRequest request = exchange.getRequest();
26 32 String path = request.getURI().getRawPath();
27 33 if (path.contains("favicon.ico")) {
... ... @@ -30,7 +36,16 @@ public class ReactiveContextWebFilter implements WebFilter {
30 36 ReactiveExchangeContextHolder.put(exchange);
31 37 return chain.filter(exchange).doFinally(signalType -> {
32 38 ReactiveExchangeContextHolder.remove();
33   - log.info("消耗时间:{}",System.currentTimeMillis()-l);
  39 + long endTime = System.currentTimeMillis() - startTime;
  40 + log.info("消耗时间:{}", endTime);
  41 + ApiMetricsInfo apiMetricsInfo = ApiMetricsInfo.build(exchange, endTime);
  42 + ApiMetricsCollector.addMetricsInfo(apiMetricsInfo);
  43 + Throwable throwable = (Throwable) exchange.getAttributes().get(GatewayConst.GATEWAY_EXCEPTION_ATTR);
  44 + if (throwable != null) {
  45 + //log.error("[全局异常处理]异常请求路径:{},记录异常信息:{}", errorAttrs.get("path"),errorAttributes.getError(request));
  46 + log.error("error:{}", throwable);
  47 + }
34 48 });
35 49 }
  50 +
36 51 }
... ...
src/main/java/com/diligrp/xtrade/gateway/predicates/ReadBodyRoutePredicateFactory.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/predicates/ReadBodyRoutePredicateFactory.java
1   -package com.diligrp.xtrade.gateway.predicates;
  1 +package com.diligrp.xtrade.core.predicates;
2 2  
3   -import com.diligrp.xtrade.gateway.filters.global.CacheRequestBodyGlobalFilter;
4   -import lombok.Data;
5   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  4 +import com.diligrp.xtrade.core.filters.global.CacheRequestBodyGlobalFilter;
  5 +import org.slf4j.Logger;
  6 +import org.slf4j.LoggerFactory;
6 7 import org.springframework.cloud.gateway.handler.AsyncPredicate;
7 8 import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
8 9 import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
... ... @@ -15,10 +16,8 @@ import org.springframework.web.server.ServerWebExchange;
15 16 import reactor.core.publisher.Mono;
16 17  
17 18 import java.util.List;
18   -import java.util.function.Consumer;
19 19 import java.util.function.Predicate;
20 20  
21   -import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.CACHE_REQUEST_BODY_OBJECT_KEY;
22 21  
23 22  
24 23 /**
... ... @@ -27,10 +26,10 @@ import static com.diligrp.xtrade.gateway.common.constant.GatewayConst.CACHE_REQU
27 26 * @Description: 缓存请求体数据predicate
28 27 * {@link CacheRequestBodyGlobalFilter}
29 28 */
30   -@Slf4j
31   -//@Component
32 29 @Deprecated
33 30 public class ReadBodyRoutePredicateFactory extends AbstractRoutePredicateFactory<ReadBodyRoutePredicateFactory.Config> {
  31 + private static final Logger log = LoggerFactory.getLogger(ReadBodyRoutePredicateFactory.class);
  32 +
34 33 private static final List<HttpMessageReader<?>> messageReaders = HandlerStrategies
35 34 .withDefaults().messageReaders();
36 35  
... ... @@ -70,16 +69,22 @@ public class ReadBodyRoutePredicateFactory extends AbstractRoutePredicateFactory
70 69 .create(exchange.mutate().request(serverHttpRequest)
71 70 .build(), messageReaders)
72 71 .bodyToMono(String.class)
73   - .doOnNext(objectValue -> exchange.getAttributes().put(CACHE_REQUEST_BODY_OBJECT_KEY, objectValue))
  72 + .doOnNext(objectValue -> exchange.getAttributes().put(GatewayConst.CACHED_REQUEST_BODY_STR_ATTR, objectValue))
74 73 .map(objectValue -> Boolean.TRUE));
75 74 };
76 75 }
77 76  
78   - @Data
79 77 public static class Config {
80 78 //需要跳过的uri
81 79 private String shouldSkipUri;
82 80  
  81 + public String getShouldSkipUri() {
  82 + return shouldSkipUri;
  83 + }
  84 +
  85 + public void setShouldSkipUri(String shouldSkipUri) {
  86 + this.shouldSkipUri = shouldSkipUri;
  87 + }
83 88 }
84 89  
85 90 }
... ...
src/main/java/com/diligrp/xtrade/gateway/repository/GatewayRepository.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/repository/GatewayRepository.java
1   -package com.diligrp.xtrade.gateway.repository;
  1 +package com.diligrp.xtrade.core.repository;
2 2  
3   -import com.diligrp.xtrade.gateway.common.constant.GatewayAttrType;
4   -import com.diligrp.xtrade.gateway.exception.GatewayServiceException;
5   -import com.diligrp.xtrade.gateway.repository.dao.AttrConfigDao;
6   -import com.diligrp.xtrade.gateway.repository.dao.RouteDao;
7   -import com.diligrp.xtrade.gateway.repository.entity.GatewayAttrConfig;
8   -import com.diligrp.xtrade.gateway.repository.entity.GatewayConfig;
  3 +import com.diligrp.xtrade.core.common.constant.GatewayAttrType;
  4 +import com.diligrp.xtrade.core.exception.GatewayRouteResourceException;
  5 +import com.diligrp.xtrade.core.repository.dao.AttrConfigDao;
  6 +import com.diligrp.xtrade.core.repository.dao.RouteDao;
  7 +import com.diligrp.xtrade.core.repository.entity.GatewayAttrConfig;
  8 +import com.diligrp.xtrade.core.repository.entity.GatewayConfig;
9 9 import com.diligrp.xtrade.shared.util.JsonUtils;
10 10 import com.diligrp.xtrade.shared.util.ReflectUtils;
11 11 import com.fasterxml.jackson.core.type.TypeReference;
... ... @@ -70,7 +70,7 @@ public class GatewayRepository implements IGatewayRepository {
70 70 }
71 71 definition.setUri(uri);
72 72 } catch (URISyntaxException e) {
73   - throw new GatewayServiceException("get url failed",e);
  73 + throw new GatewayRouteResourceException("get url failed",e);
74 74 }
75 75 //设置predicate和filter
76 76 this.setPredicatesAndFilters(gatewayConfig, definition);
... ... @@ -80,7 +80,7 @@ public class GatewayRepository implements IGatewayRepository {
80 80 private void setPredicatesAndFilters(GatewayConfig gatewayConfig, RouteDefinition definition) {
81 81 List<GatewayAttrConfig> gatewayAttrConfigs = gatewayConfig.getAttrConfigs();
82 82 if (gatewayAttrConfigs.isEmpty()) {
83   - throw new GatewayServiceException("gateway attrs can not allow empty, please check");
  83 + throw new GatewayRouteResourceException("gateway attrs can not allow empty, please check");
84 84 }
85 85 List<PredicateDefinition> predicateDefinitions = new ArrayList<>();
86 86 List<FilterDefinition> filterDefinitions = new ArrayList<>();
... ... @@ -122,7 +122,7 @@ public class GatewayRepository implements IGatewayRepository {
122 122 | InvocationTargetException
123 123 | InstantiationException
124 124 |NoSuchMethodException e) {
125   - throw new GatewayServiceException("init gateway resource failed",
  125 + throw new GatewayRouteResourceException("init gateway resource failed",
126 126 e,
127 127 new Object[]{JsonUtils.toJsonString(gatewayAttrConfig)});
128 128 }
... ...
src/main/java/com/diligrp/xtrade/gateway/repository/IGatewayRepository.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/repository/IGatewayRepository.java
1   -package com.diligrp.xtrade.gateway.repository;
  1 +package com.diligrp.xtrade.core.repository;
2 2  
3 3 import org.springframework.cloud.gateway.route.RouteDefinition;
4 4  
... ...
src/main/java/com/diligrp/xtrade/gateway/repository/dao/AttrConfigDao.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/repository/dao/AttrConfigDao.java
1   -package com.diligrp.xtrade.gateway.repository.dao;
  1 +package com.diligrp.xtrade.core.repository.dao;
2 2  
3   -import com.diligrp.xtrade.gateway.repository.entity.GatewayAttrConfig;
  3 +
  4 +import com.diligrp.xtrade.core.repository.entity.GatewayAttrConfig;
4 5  
5 6 import java.util.List;
6 7  
... ...
src/main/java/com/diligrp/xtrade/gateway/repository/dao/RouteDao.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/repository/dao/RouteDao.java
1   -package com.diligrp.xtrade.gateway.repository.dao;
  1 +package com.diligrp.xtrade.core.repository.dao;
2 2  
3   -import com.diligrp.xtrade.gateway.repository.entity.GatewayConfig;
  3 +
  4 +import com.diligrp.xtrade.core.repository.entity.GatewayConfig;
4 5  
5 6 import java.util.List;
6 7  
... ...
gateway-core/src/main/java/com/diligrp/xtrade/core/repository/entity/ApiMetricsInfoEntity.java 0 → 100644
  1 +package com.diligrp.xtrade.core.repository.entity;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +/**
  6 + * @Auther: miaoguoxin
  7 + * @Date: 2020/4/18 20:09
  8 + * @Description:
  9 + */
  10 +public class ApiMetricsInfoEntity implements Serializable {
  11 + /**服务id*/
  12 + private String serviceId;
  13 +}
... ...
gateway-core/src/main/java/com/diligrp/xtrade/core/repository/entity/GatewayAttrConfig.java 0 → 100644
  1 +package com.diligrp.xtrade.core.repository.entity;
  2 +
  3 +import com.diligrp.xtrade.core.common.constant.GatewayAttrType;
  4 +import com.diligrp.xtrade.shared.domain.BaseDo;
  5 +
  6 +/**
  7 + * @Auther: miaoguoxin
  8 + * @Date: 2018/12/12 0012 17:43
  9 + * @Description: 网关断言和过滤器配置实体
  10 + */
  11 +public class GatewayAttrConfig extends BaseDo{
  12 + /**服务id名称*/
  13 + private String serviceId;
  14 + /**类型 {@link GatewayAttrType}*/
  15 + private Integer type;
  16 + /**predicate或者filter的名称*/
  17 + private String attrName;
  18 + /** predicate或者filter所需的参数 json格式*/
  19 + private String attrArgs;
  20 + /**描述*/
  21 + private String description;
  22 + /**排序*/
  23 + private Integer sortOrder;
  24 +
  25 + public String getServiceId() {
  26 + return serviceId;
  27 + }
  28 +
  29 + public void setServiceId(String serviceId) {
  30 + this.serviceId = serviceId;
  31 + }
  32 +
  33 + public Integer getType() {
  34 + return type;
  35 + }
  36 +
  37 + public void setType(Integer type) {
  38 + this.type = type;
  39 + }
  40 +
  41 + public String getAttrName() {
  42 + return attrName;
  43 + }
  44 +
  45 + public void setAttrName(String attrName) {
  46 + this.attrName = attrName;
  47 + }
  48 +
  49 + public String getAttrArgs() {
  50 + return attrArgs;
  51 + }
  52 +
  53 + public void setAttrArgs(String attrArgs) {
  54 + this.attrArgs = attrArgs;
  55 + }
  56 +
  57 + public String getDescription() {
  58 + return description;
  59 + }
  60 +
  61 + public void setDescription(String description) {
  62 + this.description = description;
  63 + }
  64 +
  65 + public Integer getSortOrder() {
  66 + return sortOrder;
  67 + }
  68 +
  69 + public void setSortOrder(Integer sortOrder) {
  70 + this.sortOrder = sortOrder;
  71 + }
  72 +
  73 +}
... ...
src/main/java/com/diligrp/xtrade/gateway/repository/entity/GatewayConfig.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/repository/entity/GatewayConfig.java
1   -package com.diligrp.xtrade.gateway.repository.entity;
  1 +package com.diligrp.xtrade.core.repository.entity;
2 2  
3 3 import com.diligrp.xtrade.shared.domain.BaseDo;
4   -import lombok.Data;
5   -import lombok.EqualsAndHashCode;
6 4  
7 5 import java.util.List;
8 6  
... ... @@ -11,8 +9,6 @@ import java.util.List;
11 9 * @Date: 2018/12/11 0011 14:53
12 10 * @Description: 路由配置实体
13 11 */
14   -@EqualsAndHashCode(callSuper = true)
15   -@Data
16 12 public class GatewayConfig extends BaseDo {
17 13 /**服务id名称*/
18 14 private String serviceId;
... ... @@ -24,4 +20,46 @@ public class GatewayConfig extends BaseDo {
24 20 private String description;
25 21 /**包含predicate和filter*/
26 22 private List<GatewayAttrConfig> attrConfigs;
  23 +
  24 + public String getServiceId() {
  25 + return serviceId;
  26 + }
  27 +
  28 + public void setServiceId(String serviceId) {
  29 + this.serviceId = serviceId;
  30 + }
  31 +
  32 + public String getUrl() {
  33 + return url;
  34 + }
  35 +
  36 + public void setUrl(String url) {
  37 + this.url = url;
  38 + }
  39 +
  40 + @Override
  41 + public Integer getIsDel() {
  42 + return isDel;
  43 + }
  44 +
  45 + @Override
  46 + public void setIsDel(Integer isDel) {
  47 + this.isDel = isDel;
  48 + }
  49 +
  50 + public String getDescription() {
  51 + return description;
  52 + }
  53 +
  54 + public void setDescription(String description) {
  55 + this.description = description;
  56 + }
  57 +
  58 + public List<GatewayAttrConfig> getAttrConfigs() {
  59 + return attrConfigs;
  60 + }
  61 +
  62 + public void setAttrConfigs(List<GatewayAttrConfig> attrConfigs) {
  63 + this.attrConfigs = attrConfigs;
  64 + }
27 65 }
... ...
src/main/java/com/diligrp/xtrade/gateway/route/DynamicRouteLoaderIntf.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/route/DynamicRouteLoaderIntf.java
1   -package com.diligrp.xtrade.gateway.route;
  1 +package com.diligrp.xtrade.core.route;
2 2  
3 3 /**
4 4 * @Auther: miaoguoxin
... ...
src/main/java/com/diligrp/xtrade/gateway/route/GatewayResourcesLoader.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/route/GatewayResourcesLoader.java
1   -package com.diligrp.xtrade.gateway.route;
  1 +package com.diligrp.xtrade.core.route;
2 2  
3 3 import org.springframework.beans.factory.annotation.Autowired;
4 4 import org.springframework.boot.ApplicationArguments;
... ...
src/main/java/com/diligrp/xtrade/gateway/route/impl/CloudRouteResourceLoader.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/route/impl/CloudRouteResourceLoader.java
1   -package com.diligrp.xtrade.gateway.route.impl;
  1 +package com.diligrp.xtrade.core.route.impl;
2 2  
3 3 import com.alibaba.nacos.api.config.ConfigService;
4 4 import com.alibaba.nacos.api.config.listener.Listener;
5 5 import com.alibaba.nacos.api.exception.NacosException;
6   -import com.diligrp.xtrade.gateway.config.GatewayResourceLoaderConfiguration;
7   -import com.diligrp.xtrade.gateway.exception.GatewayServiceException;
8   -import com.diligrp.xtrade.gateway.route.DynamicRouteLoaderIntf;
9   -import lombok.extern.slf4j.Slf4j;
  6 +import com.diligrp.xtrade.core.config.GatewayResourceLoaderConfiguration;
  7 +import com.diligrp.xtrade.core.exception.GatewayRouteResourceException;
  8 +import com.diligrp.xtrade.core.route.DynamicRouteLoaderIntf;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
10 11 import org.springframework.beans.factory.annotation.Autowired;
11 12 import org.springframework.beans.factory.annotation.Value;
12 13 import org.springframework.cloud.gateway.config.GatewayProperties;
... ... @@ -29,8 +30,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
29 30 * @Description: 从云端配置中心加载
30 31 * {@link GatewayResourceLoaderConfiguration} 配置
31 32 */
32   -@Slf4j
33 33 public class CloudRouteResourceLoader implements DynamicRouteLoaderIntf {
  34 + private static final Logger log = LoggerFactory.getLogger(CloudRouteResourceLoader.class);
  35 +
34 36 /**标记当前gatewayproties的hash值,用于判断配置是否更新过*/
35 37 private static int gatewayPropertiesHash;
36 38 /**防止重复初始化的标记*/
... ... @@ -108,7 +110,7 @@ public class CloudRouteResourceLoader implements DynamicRouteLoaderIntf {
108 110 }
109 111 });
110 112 } catch (NacosException e) {
111   - throw new GatewayServiceException("load route resource failed", e);
  113 + throw new GatewayRouteResourceException("load route resource failed", e);
112 114 }
113 115 }
114 116  
... ...
src/main/java/com/diligrp/xtrade/gateway/route/impl/MysqlRouteResourceLoader.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/route/impl/MysqlRouteResourceLoader.java
1   -package com.diligrp.xtrade.gateway.route.impl;
  1 +package com.diligrp.xtrade.core.route.impl;
2 2  
3   -import com.diligrp.xtrade.gateway.config.GatewayResourceLoaderConfiguration;
4   -import com.diligrp.xtrade.gateway.repository.IGatewayRepository;
5   -import com.diligrp.xtrade.gateway.route.DynamicRouteLoaderIntf;
6   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.config.GatewayResourceLoaderConfiguration;
  4 +import com.diligrp.xtrade.core.repository.IGatewayRepository;
  5 +import com.diligrp.xtrade.core.route.DynamicRouteLoaderIntf;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
7 8 import org.springframework.beans.factory.annotation.Autowired;
8 9 import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
9 10 import org.springframework.cloud.gateway.route.RouteDefinition;
... ... @@ -20,8 +21,8 @@ import java.util.List;
20 21 * @Description: 从数据库加载
21 22 * 通过 {@link GatewayResourceLoaderConfiguration} 配置
22 23 */
23   -@Slf4j
24 24 public class MysqlRouteResourceLoader implements DynamicRouteLoaderIntf {
  25 + private static final Logger log = LoggerFactory.getLogger(MysqlRouteResourceLoader.class);
25 26 @Autowired
26 27 private ApplicationContext applicationContext;
27 28 @Autowired
... ...
gateway-core/src/main/java/com/diligrp/xtrade/core/support/ApiMetricsCollector.java 0 → 100644
  1 +package com.diligrp.xtrade.core.support;
  2 +
  3 +import com.diligrp.xtrade.core.route.impl.CloudRouteResourceLoader;
  4 +import com.diligrp.xtrade.shared.util.JsonUtils;
  5 +import com.google.common.collect.Queues;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +import javax.annotation.PostConstruct;
  11 +import java.util.ArrayList;
  12 +import java.util.List;
  13 +import java.util.Timer;
  14 +import java.util.TimerTask;
  15 +import java.util.concurrent.ArrayBlockingQueue;
  16 +import java.util.concurrent.BlockingQueue;
  17 +import java.util.concurrent.TimeUnit;
  18 +
  19 +/**
  20 + * @Auther: miaoguoxin
  21 + * @Date: 2020/4/18 16:19
  22 + * @Description: 收集api记录
  23 + */
  24 +@Component
  25 +public class ApiMetricsCollector {
  26 + private static final Logger log = LoggerFactory.getLogger(ApiMetricsCollector.class);
  27 +
  28 + private static final BlockingQueue<ApiMetricsInfo> METRICS_QUEUE = new ArrayBlockingQueue<>(1000, true);
  29 +
  30 + public static void addMetricsInfo(ApiMetricsInfo apiMetricsInfo) {
  31 + if (apiMetricsInfo != null) {
  32 + METRICS_QUEUE.add(apiMetricsInfo);
  33 + }
  34 + }
  35 +
  36 + @PostConstruct
  37 + public void start() {
  38 + Timer timer = new Timer();
  39 + TimerTask task = new TimerTask() {
  40 + @Override
  41 + public void run() {
  42 + log.info("api metrics collector starting");
  43 + startCollectMetrics();
  44 + }
  45 + };
  46 + timer.schedule(task, 1000 * 5);
  47 +
  48 + }
  49 +
  50 + private void startCollectMetrics() {
  51 + while (true) {
  52 + List<ApiMetricsInfo> metricsInfos = new ArrayList<>();
  53 + //第一个:传入你需要批量消费的队列
  54 + //第二个:传入一个用来接收批量消费到的数据
  55 + //第三个:批量消费数据的大小,即意味着每次消费N条数据
  56 + //第四个:批量消费的等待的最大间隔,比如说,我先在队列中只有10条数据,它不到100条,
  57 + // 那按道理就不会消费,但是这样显然不合理,所以需要指定当超多多长时间,即使当前队列中数据低于我们设定的阈值也会消费
  58 + //第五个,指定第四个参数的单位,是秒是分钟还是小时等等
  59 + try {
  60 + Queues.drain(METRICS_QUEUE, metricsInfos, 50, 1, TimeUnit.MINUTES);
  61 + for (ApiMetricsInfo metricsInfo : metricsInfos) {
  62 + log.info("消费的metrics:{}", JsonUtils.toJsonString(metricsInfo));
  63 + }
  64 + } catch (Exception e) {
  65 + log.error("collect api metrics error:{}", e);
  66 + }
  67 + }
  68 + }
  69 +}
... ...
gateway-core/src/main/java/com/diligrp/xtrade/core/support/ApiMetricsInfo.java 0 → 100644
  1 +package com.diligrp.xtrade.core.support;
  2 +
  3 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  4 +import com.diligrp.xtrade.shared.domain.Message;
  5 +import com.diligrp.xtrade.shared.util.JsonUtils;
  6 +import com.fasterxml.jackson.core.type.TypeReference;
  7 +import org.apache.logging.log4j.util.Strings;
  8 +import org.springframework.cloud.gateway.route.Route;
  9 +import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
  10 +import org.springframework.web.server.ServerWebExchange;
  11 +
  12 +import java.net.URI;
  13 +import java.net.URISyntaxException;
  14 +import java.time.LocalDateTime;
  15 +
  16 +/**
  17 + * @Auther: miaoguoxin
  18 + * @Date: 2020/4/18 20:41
  19 + * @Description:
  20 + */
  21 +public class ApiMetricsInfo {
  22 + /**响应code*/
  23 + private Integer code;
  24 + /**响应消息*/
  25 + private String message;
  26 + /**目标服务id*/
  27 + private String serviceId;
  28 + /**目标地址*/
  29 + private String url;
  30 + /**请求体*/
  31 + private String requestBody;
  32 + /**异常栈跟踪Json信息*/
  33 + private String stacktrace;
  34 + /**方法执行时间,单位:ms*/
  35 + private Long executeTime;
  36 + /**创建时间*/
  37 + private LocalDateTime createdTime;
  38 +
  39 + public ApiMetricsInfo() {
  40 + createdTime = LocalDateTime.now();
  41 + }
  42 +
  43 + public static ApiMetricsInfo build(ServerWebExchange exchange, long time) {
  44 + try {
  45 + String responseJson = exchange.getAttribute(GatewayConst.CACHED_RESPONSE_BODY_STR_ATTR);
  46 + if (Strings.isNotBlank(responseJson)) {
  47 + Message<Object> message = JsonUtils.fromJsonString(responseJson, new TypeReference<>() {
  48 + });
  49 + URI uri = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
  50 + Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
  51 + String requestBody = exchange.getAttribute(GatewayConst.CACHED_REQUEST_BODY_STR_ATTR);
  52 + Throwable throwable = (Throwable) exchange.getAttributes().get(GatewayConst.GATEWAY_EXCEPTION_ATTR);
  53 + ApiMetricsInfo info = new ApiMetricsInfo();
  54 + info.setCode(message.getCode());
  55 + info.setMessage(message.getMessage());
  56 + info.setUrl(uri != null ? uri.toString() : "unknown");
  57 + info.setServiceId(route != null ? route.getId() : "unknown");
  58 + info.setRequestBody(requestBody);
  59 + info.setStacktrace(throwable != null ? JsonUtils.toJsonString(throwable.getStackTrace()) : null);
  60 + info.setExecuteTime(time);
  61 + return info;
  62 + }
  63 + return null;
  64 + } catch (Exception e) {
  65 + return null;
  66 + }
  67 + }
  68 +
  69 + public Long getExecuteTime() {
  70 + return executeTime;
  71 + }
  72 +
  73 + public void setExecuteTime(Long executeTime) {
  74 + this.executeTime = executeTime;
  75 + }
  76 +
  77 + public LocalDateTime getCreatedTime() {
  78 + return createdTime;
  79 + }
  80 +
  81 + public void setCreatedTime(LocalDateTime createdTime) {
  82 + this.createdTime = createdTime;
  83 + }
  84 +
  85 + public Integer getCode() {
  86 + return code;
  87 + }
  88 +
  89 + public void setCode(Integer code) {
  90 + this.code = code;
  91 + }
  92 +
  93 + public String getMessage() {
  94 + return message;
  95 + }
  96 +
  97 + public void setMessage(String message) {
  98 + this.message = message;
  99 + }
  100 +
  101 + public String getServiceId() {
  102 + return serviceId;
  103 + }
  104 +
  105 + public void setServiceId(String serviceId) {
  106 + this.serviceId = serviceId;
  107 + }
  108 +
  109 + public String getUrl() {
  110 + return url;
  111 + }
  112 +
  113 + public void setUrl(String url) {
  114 + this.url = url;
  115 + }
  116 +
  117 + public String getRequestBody() {
  118 + return requestBody;
  119 + }
  120 +
  121 + public void setRequestBody(String requestBody) {
  122 + this.requestBody = requestBody;
  123 + }
  124 +
  125 + public String getStacktrace() {
  126 + return stacktrace;
  127 + }
  128 +
  129 + public void setStacktrace(String stacktrace) {
  130 + this.stacktrace = stacktrace;
  131 + }
  132 +
  133 +}
... ...
src/main/java/com/diligrp/xtrade/gateway/support/context/ReactiveExchangeContextHolder.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/support/context/ReactiveExchangeContextHolder.java
1   -package com.diligrp.xtrade.gateway.support.context;
  1 +package com.diligrp.xtrade.core.support.context;
2 2  
3 3 import org.springframework.web.server.ServerWebExchange;
4 4  
... ...
src/main/java/com/diligrp/xtrade/gateway/support/context/ReactiveWebContextBeanProcessor.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/support/context/ReactiveWebContextBeanProcessor.java
1   -package com.diligrp.xtrade.gateway.support.context;
  1 +package com.diligrp.xtrade.core.support.context;
2 2  
3 3 import org.springframework.beans.BeansException;
4 4 import org.springframework.beans.factory.ObjectFactory;
... ...
src/main/java/com/diligrp/xtrade/gateway/support/dispatch/DispatchContext.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/support/dispatch/DispatchContext.java
1   -package com.diligrp.xtrade.gateway.support.dispatch;
  1 +package com.diligrp.xtrade.core.support.dispatch;
2 2  
3   -import lombok.Getter;
4 3 import org.springframework.http.server.reactive.ServerHttpRequest;
5 4 import org.springframework.http.server.reactive.ServerHttpResponse;
6 5  
... ... @@ -8,7 +7,6 @@ import org.springframework.http.server.reactive.ServerHttpResponse;
8 7 * @Auther: miaoguoxin
9 8 * @Date: 2020/4/16 09:20
10 9 */
11   -@Getter
12 10 public class DispatchContext<T> {
13 11 private final ServerHttpRequest request;
14 12 private final ServerHttpResponse response;
... ... @@ -21,4 +19,16 @@ public class DispatchContext&lt;T&gt; {
21 19 this.param = param;
22 20 }
23 21  
  22 + public ServerHttpRequest getRequest() {
  23 + return request;
  24 + }
  25 +
  26 + public ServerHttpResponse getResponse() {
  27 + return response;
  28 + }
  29 +
  30 + public T getParam() {
  31 + return param;
  32 + }
24 33 }
  34 +
... ...
src/main/java/com/diligrp/xtrade/gateway/support/dispatch/MappingMetaInfo.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/support/dispatch/MappingMetaInfo.java
1   -package com.diligrp.xtrade.gateway.support.dispatch;
  1 +package com.diligrp.xtrade.core.support.dispatch;
2 2  
3   -import lombok.Getter;
4 3 import org.springframework.validation.annotation.Validated;
5 4  
6 5 import java.lang.reflect.Method;
... ... @@ -9,21 +8,15 @@ import java.lang.reflect.Method;
9 8 * @Auther: miaoguoxin
10 9 * @Date: 2020/4/15 09:57
11 10 */
12   -@Getter
13 11 public class MappingMetaInfo {
14 12 /**方法所属的bean class*/
15 13 private final Class<?> targetClass;
16 14 /** 需要执行的方法 */
17 15 private final Method targetMethod;
18 16 /***/
19   - private Validated validated;
  17 + private final Validated validated;
20 18 /**泛化参数类型 {@link DispatchContext#getParam()}*/
21   - private Class<?> parameterType;
22   -
23   - public MappingMetaInfo(Class<?> targetBean, Method targetMethod) {
24   - this.targetClass = targetBean;
25   - this.targetMethod = targetMethod;
26   - }
  19 + private final Class<?> parameterType;
27 20  
28 21 public MappingMetaInfo(Class<?> targetClass, Method targetMethod, Validated validated, Class<?> parameterType) {
29 22 this.targetClass = targetClass;
... ... @@ -32,11 +25,30 @@ public class MappingMetaInfo {
32 25 this.parameterType = parameterType;
33 26 }
34 27  
  28 +
35 29 @Override
36 30 public String toString() {
37   - return "MappingInfo{" +
38   - "targetBean=" + targetClass.getName() +
39   - ", targetMethod=" + targetMethod.getName() +
  31 + return "MappingMetaInfo{" +
  32 + "targetClass=" + targetClass +
  33 + ", targetMethod=" + targetMethod +
  34 + ", validated=" + validated +
  35 + ", parameterType=" + parameterType +
40 36 '}';
41 37 }
  38 +
  39 + public Class<?> getTargetClass() {
  40 + return targetClass;
  41 + }
  42 +
  43 + public Method getTargetMethod() {
  44 + return targetMethod;
  45 + }
  46 +
  47 + public Validated getValidated() {
  48 + return validated;
  49 + }
  50 +
  51 + public Class<?> getParameterType() {
  52 + return parameterType;
  53 + }
42 54 }
... ...
src/main/java/com/diligrp/xtrade/gateway/support/dispatch/MappingRegister.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/support/dispatch/MappingRegister.java
1   -package com.diligrp.xtrade.gateway.support.dispatch;
  1 +package com.diligrp.xtrade.core.support.dispatch;
2 2  
3   -import com.diligrp.xtrade.gateway.XtradeGatewayApplication;
4   -import com.diligrp.xtrade.gateway.common.annotation.DispatchMapping;
5   -import com.diligrp.xtrade.gateway.common.constant.GatewayConst;
6   -import com.diligrp.xtrade.gateway.common.utils.PathUtils;
7   -import com.diligrp.xtrade.gateway.config.property.DispatchProperties;
8   -import lombok.extern.slf4j.Slf4j;
  3 +import com.diligrp.xtrade.core.common.annotation.DispatchMapping;
  4 +import com.diligrp.xtrade.core.common.constant.GatewayConst;
  5 +import com.diligrp.xtrade.core.common.utils.PathUtils;
  6 +import com.diligrp.xtrade.core.config.property.DispatchProperties;
  7 +import com.diligrp.xtrade.core.exception.GatewayDispatchException;
9 8 import org.reflections.Reflections;
10 9 import org.reflections.scanners.FieldAnnotationsScanner;
11 10 import org.reflections.scanners.MethodAnnotationsScanner;
12 11 import org.reflections.scanners.SubTypesScanner;
13 12 import org.reflections.util.ConfigurationBuilder;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
14 15 import org.springframework.beans.factory.annotation.Autowired;
15 16 import org.springframework.boot.SpringApplication;
16 17 import org.springframework.context.ApplicationContext;
... ... @@ -31,8 +32,9 @@ import java.util.Set;
31 32 * @Description: 注册聚合服务方法映射
32 33 */
33 34 @Component
34   -@Slf4j
35 35 public class MappingRegister implements ApplicationListener<ContextRefreshedEvent> {
  36 + private static final Logger log = LoggerFactory.getLogger(MappingRegister.class);
  37 +
36 38 @Autowired
37 39 private ApplicationContext applicationContext;
38 40 @Autowired
... ... @@ -109,7 +111,7 @@ public class MappingRegister implements ApplicationListener&lt;ContextRefreshedEven
109 111 private String[] getScanPackages() {
110 112 String[] scanPackages = dispatchProperties.getAggregationScanPackages();
111 113 if (scanPackages == null || scanPackages.length == 0) {
112   - return new String[]{XtradeGatewayApplication.class.getPackageName()};
  114 + throw new GatewayDispatchException("aggregation scan packages can not be empty");
113 115 }
114 116 return scanPackages;
115 117 }
... ...
src/main/java/com/diligrp/xtrade/gateway/support/dispatch/RequestDispatcher.java renamed to gateway-core/src/main/java/com/diligrp/xtrade/core/support/dispatch/RequestDispatcher.java
1   -package com.diligrp.xtrade.gateway.support.dispatch;
  1 +package com.diligrp.xtrade.core.support.dispatch;
2 2  
3   -import com.diligrp.xtrade.gateway.common.utils.PathUtils;
4   -import com.diligrp.xtrade.gateway.common.utils.ValidateUtils;
5   -import com.diligrp.xtrade.gateway.exception.GatewayParamNotValidException;
6   -import com.diligrp.xtrade.gateway.exception.GatewayServiceException;
7   -import com.diligrp.xtrade.gateway.filters.factory.DispatchGatewayFilterFactory;
  3 +import com.diligrp.xtrade.core.common.utils.PathUtils;
  4 +import com.diligrp.xtrade.core.common.utils.ValidateUtils;
  5 +import com.diligrp.xtrade.core.exception.GatewayDispatchException;
  6 +import com.diligrp.xtrade.core.filters.factory.DispatchGatewayFilterFactory;
8 7 import com.diligrp.xtrade.shared.domain.Message;
9   -import com.diligrp.xtrade.shared.type.ErrorCode;
10 8 import com.diligrp.xtrade.shared.util.JsonUtils;
11 9 import com.google.common.base.Strings;
12   -import lombok.extern.slf4j.Slf4j;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
13 12 import org.springframework.beans.factory.annotation.Autowired;
14 13 import org.springframework.cloud.gateway.support.NotFoundException;
15 14 import org.springframework.context.ApplicationContext;
16 15 import org.springframework.stereotype.Component;
17 16 import org.springframework.validation.annotation.Validated;
18   -import org.springframework.web.server.ResponseStatusException;
19 17 import org.springframework.web.server.ServerWebExchange;
  18 +import org.springframework.web.server.ServerWebInputException;
20 19 import org.springframework.web.util.pattern.PathPattern;
21 20  
22 21 import java.lang.reflect.InvocationTargetException;
... ... @@ -35,8 +34,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
35 34 * {@link DispatchGatewayFilterFactory}
36 35 */
37 36 @Component
38   -@Slf4j
39 37 public class RequestDispatcher {
  38 + private static final Logger log = LoggerFactory.getLogger(RequestDispatcher.class);
40 39 /**
41 40 * key: uri value:{@link MappingMetaInfo}
42 41 */
... ... @@ -69,7 +68,7 @@ public class RequestDispatcher {
69 68 Object resultData = this.beginDispatch(matchUri, paramsJson,exchange);
70 69 return Message.success(resultData);
71 70 } catch (Throwable e) {
72   - return handleException(e);
  71 + throw new GatewayDispatchException("dispatch method error", e);
73 72 }
74 73 }
75 74  
... ... @@ -79,9 +78,9 @@ public class RequestDispatcher {
79 78 * @date 2020/4/16
80 79 */
81 80 public static void addMapping(String uri, MappingMetaInfo mappingMetaInfo) {
82   - Optional.ofNullable(MAPPING_INFO_MAP.put(uri, mappingMetaInfo))
  81 + Optional.ofNullable(MAPPING_INFO_MAP.putIfAbsent(uri, mappingMetaInfo))
83 82 .ifPresent(info -> {
84   - throw new GatewayServiceException(
  83 + throw new GatewayDispatchException(
85 84 String.format("mapping:【%s】 duplicate:【%s】", uri, info.toString()));
86 85 });
87 86  
... ... @@ -100,7 +99,7 @@ public class RequestDispatcher {
100 99 Class<?> parameterType = mappingMetaInfo.getParameterType();
101 100 Object paramData = null;
102 101 if (parameterType != null){
103   - paramData = JsonUtils.fromJsonString(paramsJson, parameterType);
  102 + paramData = this.getRequestParam(paramsJson, parameterType);
104 103 Validated validated = mappingMetaInfo.getValidated();
105 104 if (validated != null){
106 105 ValidateUtils.validate(paramData,validated.value());
... ... @@ -114,6 +113,15 @@ public class RequestDispatcher {
114 113 return this.call(targetMethod, targetBean, dispatchContext);
115 114 }
116 115  
  116 + private Object getRequestParam(String paramsJson, Class<?> parameterType) {
  117 + try {
  118 + return JsonUtils.fromJsonString(paramsJson, parameterType);
  119 + }catch (IllegalArgumentException ex){
  120 + log.error("paramsJson:{}\n parameterType:{}",paramsJson,parameterType);
  121 + throw new GatewayDispatchException(new ServerWebInputException("illegal json"));
  122 + }
  123 + }
  124 +
117 125 public Object call(Method method, Object target, Object params) throws Throwable {
118 126 try {
119 127 return method.invoke(target, params);
... ... @@ -122,20 +130,6 @@ public class RequestDispatcher {
122 130 }
123 131 }
124 132  
125   - private static Message<Object> handleException(Throwable ex) {
126   - if (ex instanceof ResponseStatusException) {
127   - int statusCode = ((ResponseStatusException) ex).getStatus().value();
128   - log.error("aggregation dispatch {}:{}", statusCode, ex.getMessage());
129   - return Message.failure(statusCode,ex.getMessage());
130   - } else if (ex instanceof GatewayParamNotValidException) {
131   - return Message.failure(
132   - ErrorCode.ILLEGAL_PARAMS.getCode(),ex.getMessage());
133   - } else {
134   - log.error("aggregation dispatch error:{}", ex);
135   - return Message.failure(
136   - ErrorCode.UNKNOWN_ERROR.getCode(),ErrorCode.UNKNOWN_ERROR.getName());
137   - }
138   - }
139 133  
140 134  
141 135 }
... ...
src/main/resources/mapper/AttrConfigDao.xml renamed to gateway-core/src/main/resources/mapper/AttrConfigDao.xml
1 1 <?xml version="1.0" encoding="UTF-8" ?>
2 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 3 <mapper namespace="com.diligrp.xtrade.gateway.repository.dao.AttrConfigDao">
4   - <resultMap id="Base_Result_Map" type="com.diligrp.xtrade.gateway.repository.entity.GatewayAttrConfig">
  4 + <resultMap id="Base_Result_Map" type="com.diligrp.xtrade.core.repository.entity.GatewayAttrConfig">
5 5 <id property="id" column="id"/>
6 6 <result property="serviceId" column="service_id"/>
7 7 <result property="type" column="type"/>
... ...
src/main/resources/mapper/RouteDao.xml renamed to gateway-core/src/main/resources/mapper/RouteDao.xml
1 1 <?xml version="1.0" encoding="UTF-8" ?>
2 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 3 <mapper namespace="com.diligrp.xtrade.gateway.repository.dao.RouteDao">
4   - <resultMap id="Base_Result_Map" type="com.diligrp.xtrade.gateway.repository.entity.GatewayConfig">
  4 + <resultMap id="Base_Result_Map" type="com.diligrp.xtrade.core.repository.entity.GatewayConfig">
5 5 <id property="id" column="id"/>
6 6 <result property="url" column="url"/>
7 7 <result property="serviceId" column="service_id"/>
... ...
... ... @@ -2,12 +2,13 @@
2 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4 4 <modelVersion>4.0.0</modelVersion>
5   - <parent>
6   - <groupId>org.springframework.boot</groupId>
7   - <artifactId>spring-boot-starter-parent</artifactId>
8   - <version>2.2.5.RELEASE</version>
9   - <relativePath/> <!-- lookup parent from repository -->
10   - </parent>
  5 + <packaging>pom</packaging>
  6 + <modules>
  7 + <module>gateway-core</module>
  8 + <module>gateway-business</module>
  9 + </modules>
  10 +
  11 +
11 12 <groupId>com.diligrp</groupId>
12 13 <artifactId>xtrade-gateway-service</artifactId>
13 14 <version>1.0.0</version>
... ... @@ -19,18 +20,16 @@
19 20 <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
20 21 <spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
21 22 <mybatis-starter.version>2.1.2</mybatis-starter.version>
  23 + <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
  24 + <nacos.version>1.2.0</nacos.version>
  25 + <xtrade-shared.version>0.0.1</xtrade-shared.version>
  26 + <reflection.version>0.9.11</reflection.version>
  27 + <gateway.version>1.0.0</gateway.version>
22 28 </properties>
23   -
24 29 <dependencies>
25 30 <dependency>
26   - <groupId>com.diligrp</groupId>
27   - <artifactId>xtrade-shared-spring-boot-starter</artifactId>
28   - <version>0.0.1</version>
29   - </dependency>
30   - <dependency>
31 31 <groupId>org.springframework.boot</groupId>
32 32 <artifactId>spring-boot-configuration-processor</artifactId>
33   - <optional>true</optional>
34 33 </dependency>
35 34 <!-- <dependency>
36 35 <groupId>org.springframework.boot</groupId>
... ... @@ -40,61 +39,53 @@
40 39 <groupId>net.sf.ehcache</groupId>
41 40 <artifactId>ehcache</artifactId>
42 41 </dependency>-->
43   - <dependency>
44   - <groupId>org.mybatis.spring.boot</groupId>
45   - <artifactId>mybatis-spring-boot-starter</artifactId>
46   - <version>${mybatis-starter.version}</version>
47   - </dependency>
48   - <dependency>
49   - <groupId>org.reflections</groupId>
50   - <artifactId>reflections</artifactId>
51   - <version>0.9.11</version>
52   - </dependency>
53   - <dependency>
54   - <groupId>org.springframework.cloud</groupId>
55   - <artifactId>spring-cloud-starter-gateway</artifactId>
56   - </dependency>
57   - <dependency>
  42 + <!-- <dependency>
58 43 <groupId>org.projectlombok</groupId>
59 44 <artifactId>lombok</artifactId>
60 45 <optional>true</optional>
61   - </dependency>
62   - <dependency>
63   - <groupId>com.alibaba.cloud</groupId>
64   - <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
65   - </dependency>
66   - <dependency>
67   - <groupId>com.alibaba.cloud</groupId>
68   - <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
69   - </dependency>
70   - <dependency>
71   - <groupId>org.springframework.boot</groupId>
72   - <artifactId>spring-boot-starter-test</artifactId>
73   - <scope>test</scope>
74   - </dependency>
75   - <dependency>
76   - <groupId>org.springframework.boot</groupId>
77   - <artifactId>spring-boot-starter-data-redis</artifactId>
78   - </dependency>
79   - <dependency>
80   - <groupId>org.apache.commons</groupId>
81   - <artifactId>commons-pool2</artifactId>
82   - </dependency>
83   - <dependency>
84   - <groupId>com.alibaba.nacos</groupId>
85   - <artifactId>nacos-api</artifactId>
86   - <version>1.2.0</version>
87   - </dependency>
88   - <dependency>
89   - <groupId>com.alibaba.nacos</groupId>
90   - <artifactId>nacos-client</artifactId>
91   - <version>1.2.0</version>
92   - </dependency>
93   -
  46 + </dependency>-->
94 47 </dependencies>
95   -
96 48 <dependencyManagement>
97 49 <dependencies>
  50 + <!-- SpringBoot的依赖配置-->
  51 + <dependency>
  52 + <groupId>org.springframework.boot</groupId>
  53 + <artifactId>spring-boot-dependencies</artifactId>
  54 + <version>${spring-boot.version}</version>
  55 + <type>pom</type>
  56 + <scope>import</scope>
  57 + </dependency>
  58 + <dependency>
  59 + <groupId>com.diligrp</groupId>
  60 + <artifactId>xtrade-shared-spring-boot-starter</artifactId>
  61 + <version>${xtrade-shared.version}</version>
  62 + </dependency>
  63 + <dependency>
  64 + <artifactId>gateway-core</artifactId>
  65 + <groupId>com.diligrp</groupId>
  66 + <version>${gateway.version}</version>
  67 + </dependency>
  68 +
  69 + <dependency>
  70 + <groupId>org.mybatis.spring.boot</groupId>
  71 + <artifactId>mybatis-spring-boot-starter</artifactId>
  72 + <version>${mybatis-starter.version}</version>
  73 + </dependency>
  74 + <dependency>
  75 + <groupId>org.reflections</groupId>
  76 + <artifactId>reflections</artifactId>
  77 + <version>${reflection.version}</version>
  78 + </dependency>
  79 + <dependency>
  80 + <groupId>com.alibaba.nacos</groupId>
  81 + <artifactId>nacos-api</artifactId>
  82 + <version>${nacos.version}</version>
  83 + </dependency>
  84 + <dependency>
  85 + <groupId>com.alibaba.nacos</groupId>
  86 + <artifactId>nacos-client</artifactId>
  87 + <version>${nacos.version}</version>
  88 + </dependency>
98 89 <dependency>
99 90 <groupId>org.springframework.cloud</groupId>
100 91 <artifactId>spring-cloud-dependencies</artifactId>
... ...
src/main/java/com/diligrp/xtrade/gateway/api/Api.java deleted 100644 → 0
1   -package com.diligrp.xtrade.gateway.api;
2   -
3   -import lombok.Data;
4   -
5   -import java.io.Serializable;
6   -
7   -/**
8   - * @Auther: miaoguoxin
9   - * @Date: 2019/3/31 16:24
10   - * @Description: 只用于网关api缓存的对象
11   - */
12   -@Data
13   -public class Api implements Serializable {
14   - /**服务名称*/
15   - private String serviceId;
16   -
17   - private String patternUrl;
18   - //并发量
19   - private int replenishRate = 2;
20   - //容量
21   - private int burstCapacity = 5;
22   -
23   - private Integer state;
24   -}
src/main/java/com/diligrp/xtrade/gateway/repository/entity/GatewayAttrConfig.java deleted 100644 → 0
1   -package com.diligrp.xtrade.gateway.repository.entity;
2   -
3   -import com.diligrp.xtrade.gateway.common.constant.GatewayAttrType;
4   -import com.diligrp.xtrade.shared.domain.BaseDo;
5   -import lombok.Data;
6   -import lombok.EqualsAndHashCode;
7   -
8   -/**
9   - * @Auther: miaoguoxin
10   - * @Date: 2018/12/12 0012 17:43
11   - * @Description: 网关断言和过滤器配置实体
12   - */
13   -@EqualsAndHashCode(callSuper = true)
14   -@Data
15   -public class GatewayAttrConfig extends BaseDo{
16   - /**服务id名称*/
17   - private String serviceId;
18   - /**类型 {@link GatewayAttrType}*/
19   - private Integer type;
20   - /**predicate或者filter的名称*/
21   - private String attrName;
22   - /** predicate或者filter所需的参数 json格式*/
23   - private String attrArgs;
24   - /**描述*/
25   - private String description;
26   - /**排序*/
27   - private Integer sortOrder;
28   - /**1:删除 0:正常*/
29   - private Integer isDel;
30   -}
src/main/resources/bootstrap-dev.yml deleted 100644 → 0
1   -spring:
2   - cloud:
3   - nacos:
4   - discovery:
5   - username: xtrade
6   - password: abcd1234
7   - server-addr: 10.28.1.79:8848
8   - namespace: 35211f71-92a9-4f3e-975e-37b1132e05c8
9   - config:
10   - username: xtrade
11   - password: abcd1234
12   - server-addr: 10.28.1.79:8848
13   - namespace: 35211f71-92a9-4f3e-975e-37b1132e05c8
src/test/java/com/diligrp/xtrade/gateway/XtradeGatewayApplicationTests.java deleted 100644 → 0
1   -package com.diligrp.xtrade.gateway;
2   -
3   -import org.springframework.boot.test.context.SpringBootTest;
4   -
5   -@SpringBootTest
6   -class XtradeGatewayApplicationTests {
7   -
8   -}