diff --git a/maxkey-gataway/build.gradle b/maxkey-gataway/build.gradle new file mode 100644 index 000000000..5e3c056ee --- /dev/null +++ b/maxkey-gataway/build.gradle @@ -0,0 +1,52 @@ +description = "maxkey-gateway" + +//add support for Java +apply plugin: 'java' + + +dependencies { + implementation project(":maxkey-common") + + //spring-cloud gateway server + implementation group: 'org.springframework.cloud', name: 'spring-cloud-gateway-server', version: "${springcloudVersion}" + implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-gateway', version: "${springcloudVersion}" + //spring-cloud loadbalancer + implementation group: 'org.springframework.cloud', name: 'spring-cloud-loadbalancer', version: "${springcloudVersion}" + implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-loadbalancer', version: "${springcloudVersion}" + //spring-cloud netflix-hystrix + implementation group: 'org.springframework.cloud', name: 'spring-cloud-netflix-hystrix', version: '2.2.9.RELEASE' + implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-hystrix', version: '2.2.9.RELEASE' + + //spring-cloud-alibaba + implementation group: 'com.alibaba.cloud', name: 'spring-cloud-circuitbreaker-sentinel', version: "${springcloudalibabaVersion}" + implementation group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-sentinel-datasource', version: "${springcloudalibabaVersion}" + implementation group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-sentinel-gateway', version: "${springcloudalibabaVersion}" + implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-sentinel', version: "${springcloudalibabaVersion}" + + //spring-cloud-alibaba sentinel + implementation group: 'com.alibaba.csp', name: 'sentinel-annotation-aspectj', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-api-gateway-adapter-common', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-core', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-cluster-common-default', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-cluster-client-default', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-cluster-server-default', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-datasource-extension', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-parameter-flow-control', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-reactor-adapter', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-transport-common', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-transport-simple-http', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-spring-cloud-gateway-adapter', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-spring-webflux-adapter', version: "${springcloudalibabacsplVersion}" + implementation group: 'com.alibaba.csp', name: 'sentinel-spring-webmvc-adapter', version: "${springcloudalibabacsplVersion}" + //netty + implementation group: 'io.projectreactor.netty', name: 'reactor-netty', version: "${reactornettyVersion}" + implementation group: 'io.projectreactor.netty', name: 'reactor-netty-http', version: "${reactornettyVersion}" + implementation group: 'io.projectreactor.netty', name: 'reactor-netty-core', version: "${reactornettyVersion}" + implementation group: 'io.projectreactor.addons', name: 'reactor-extra', version: "${reactorextraVersion}" + + implementation group: 'com.googlecode.concurrentlinkedhashmap', name: 'concurrentlinkedhashmap-lru', version: "${concurrentlinkedhashmaplruVersion}" + implementation group: 'com.stoyanr', name: 'evictor', version: "${evictorVersion}" + implementation group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: "${jakartaannotationVersion}" + implementation group: 'io.lettuce', name: 'lettuce-core', version: "${lettuceVersion}" + implementation group: 'io.netty', name: 'netty-all', version: "${nettyVersion}" +} diff --git a/maxkey-gataway/src/main/java/org/gateway/GatewayApplication.java b/maxkey-gataway/src/main/java/org/gateway/GatewayApplication.java new file mode 100644 index 000000000..5dfa8c160 --- /dev/null +++ b/maxkey-gataway/src/main/java/org/gateway/GatewayApplication.java @@ -0,0 +1,24 @@ +package org.gateway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; + + +@SpringBootApplication( + exclude={ + RedisAutoConfiguration.class, + DruidDataSourceAutoConfigure.class, + DataSourceAutoConfiguration.class +}) +@EnableDiscoveryClient +public class GatewayApplication { + + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class, args); + } +} diff --git a/maxkey-gataway/src/main/resources/application.yml b/maxkey-gataway/src/main/resources/application.yml new file mode 100644 index 000000000..1010f3b78 --- /dev/null +++ b/maxkey-gataway/src/main/resources/application.yml @@ -0,0 +1,54 @@ +#端口号 +application: + name: maxkey-gateway-server + formatted-version: v2.9.0 GA +server: + port: 9000 +spring: + application: + name: maxkey-gateway-server + cloud: + gateway: + routes: +#nacos健康检查端口8080 + - id: maxkeys_route + uri: lb://maxkey + filters: + - PrefixPath=/ + predicates: + - Path=/maxkey/** + - id: maxkey_mgts_route + uri: lb://maxkey-mgt + filters: + - PrefixPath=/ + predicates: + - Path=/maxkey-mgt/** +# default-filters: +# - name: Hystrix +# args: +# name: default +# fallbackUri: 'forward:/defaultFallback' + + nacos: + discovery: + server-addr: ${NACOS_DISCOVERY_SERVER_ADDR:127.0.0.1:8848} + enabled: ${NACOS_DISCOVERY_ENABLED:true} + config: +# file-extension: yaml +# server-addr: 127.0.0.1:8848 + username: ${NACOS_CONFIG_USERNAME:nacos} + password: ${NACOS_CONFIG_PASSWORD:nacos} + + main: + web-application-type: reactive +#spring.main.web-application-type=reactive +hystrix: + command: + default: + execution: + isolation: + strategy: SEMAPHORE + thread: + #1分钟服务无响应则直接熔断 + timeoutInMilliseconds: 60000 + \ No newline at end of file diff --git a/maxkey-gataway/src/main/resources/bootstrap.properties b/maxkey-gataway/src/main/resources/bootstrap.properties new file mode 100644 index 000000000..e0e394ba2 --- /dev/null +++ b/maxkey-gataway/src/main/resources/bootstrap.properties @@ -0,0 +1,12 @@ +spring.cloud.nacos.config.server-addr =${NACOS_CONFIG_SERVER_ADDR:127.0.0.1:8848} + +# Nacos \u63A7\u5236\u53F0\u6DFB\u52A0\u914D\u7F6E\uFF1A +# Data ID\uFF1Amaxkey-gateway.properties +# Group\uFF1ADEFAULT_GROUP +# \u914D\u7F6E\u5185\u5BB9\uFF1AuseLocalCache=true +spring.application.name =maxkey-gateway +# \u6307\u5B9A\u914D\u7F6E\u7684\u540E\u7F00\uFF0C\u652F\u6301 properties\u3001yaml\u3001yml\uFF0C\u9ED8\u8BA4\u4E3A properties +spring.cloud.nacos.config.file-extension =properties +#spring.cloud.nacos.config.file-extension=yaml +#\u662F\u5426\u542F\u7528nacos\u914D\u7F6E +spring.cloud.nacos.config.enabled =${NACOS_CONFIG_ENABLED:false} \ No newline at end of file diff --git a/maxkey-gataway/src/main/resources/log4j2.xml b/maxkey-gataway/src/main/resources/log4j2.xml new file mode 100644 index 000000000..c3736bf20 --- /dev/null +++ b/maxkey-gataway/src/main/resources/log4j2.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file