This commit is contained in:
Jesse-Ma
2023-04-19 16:02:44 +08:00
parent facbe4a5d5
commit c7d135cc15
5 changed files with 88 additions and 188 deletions

81
pom.xml
View File

@@ -1,22 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.3</version> <version>3.0.5</version>
<relativePath /> <!-- lookup parent from repository --> <relativePath /> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.flagnote</groupId> <groupId>com.flagnote</groupId>
<artifactId>flagnote-gateway</artifactId> <artifactId>flagnote-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1</version>
<name>flagnote-gateway</name> <name>flagnote-gateway</name>
<description>Demo project for Spring Boot</description> <description>Demo project for Spring Boot</description>
<properties> <properties>
<java.version>17</java.version> <java.version>17</java.version>
<spring-cloud.version>2022.0.1</spring-cloud.version> <maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
<spring-cloud.version>2022.0.2</spring-cloud.version>
<docker.image.prefix>flagnote</docker.image.prefix>
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
@@ -29,12 +47,7 @@
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId> <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency> </dependency>
<!--
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
-->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
@@ -45,13 +58,6 @@
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.7.22</version> <version>5.7.22</version>
</dependency> </dependency>
<!--
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
@@ -81,10 +87,51 @@
<build> <build>
<plugins> <plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<googleContainerRegistryEnabled>false</googleContainerRegistryEnabled>
<dockerHost>http://rancher:42375</dockerHost>
<imageName>
${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>

View File

@@ -0,0 +1,8 @@
FROM openjdk:17-slim
VOLUME /tmp
ADD flagnote-gateway-0.0.1.jar app.jar
RUN sh -c 'touch /app.jar'
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN apt-get update && apt-get install -y curl
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

View File

@@ -1,13 +1,17 @@
package com.flagnote.gateway; package com.flagnote.gateway;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import com.flagnote.gateway.config.BkrLoadBalancerConfiguration; import com.flagnote.gateway.config.BkrLoadBalancerConfiguration;
@SpringBootApplication @SpringBootApplication
@LoadBalancerClient(name = "noteCommonService", configuration = BkrLoadBalancerConfiguration.class) @EnableAutoConfiguration
@EnableDiscoveryClient
@LoadBalancerClient(name = "flagnote-service", configuration = BkrLoadBalancerConfiguration.class)
public class GatewayApplication { public class GatewayApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args); SpringApplication.run(GatewayApplication.class, args);

View File

@@ -1,170 +0,0 @@
server:
# address: 127.0.0.1
port: 10000
spring:
application:
name: flagnote-gateway
profiles:
active: dev
# config:
# import: 'optional:configserver:http://localhost:9999'
data:
redis:
database: 10
host: service.flagnote.com
port: 16379
timeout: 10000
poolMaxTotal: 10
poolMaxIdle: 10
poolMaxWait: 3
password: redis1qazx1qazx
codec:
max-in-memory-size: 10MB
servlet:
multipart:
# 最大支持文件大小
max-file-size: 10MB
# 最大支持请求大小
max-request-size: 10MB
cloud:
discovery:
client:
simple:
instances:
noteCommonService: # 一定要带端口
- uri: http://127.0.0.1:20000
- uri: http://127.0.0.1:20001
keyMetaService: # 一定要带端口
- uri: http://127.0.0.1:20000
- uri: http://127.0.0.1:20001
loadbalancer:
configurations: health-check
health-check:
path:
noteCommonService: /f2w8u47ie56edc93/actuator/health
keyMetaService: /f2w8u47ie56edc93/actuator/health
initial-delay: 0
interval: 5s
inetutils:
# 指定此客户端的ip
default-ip-address: localhost
gateway:
# globalcors:
# corsConfigurations:
# '[/**]':
# allowedOrigins: "*"
# allowedMethods: "*"
routes:
- id: keyMeta
uri: lb://keyMetaService
order: -1
predicates:
- Path=/note/keyMeta
- Method=GET
filters:
- name: RequestRateLimiter
args:
# 如果返回的key是空的话false则不进行限流
# deny-empty-key: true
# status-code: TOO_MANY_REQUESTS
# 每秒产生多少个令牌
redis-rate-limiter.replenishRate: 1
# 1秒内最大的令牌即在1s内可以允许的突发流程设置为0表示阻止所有的请求
redis-rate-limiter.burstCapacity: 10
# 每次请求申请几个令牌
redis-rate-limiter.requestedTokens: 1
# IP 地址限流
key-resolver: "#{@remoteAddrKeyResolver}"
- name: RequestRateLimiter
args:
# 如果返回的key是空的话false则不进行限流
# deny-empty-key: true
# status-code: TOO_MANY_REQUESTS
# 每秒产生多少个令牌
redis-rate-limiter.replenishRate: 1
# 1秒内最大的令牌即在1s内可以允许的突发流程设置为0表示阻止所有的请求
redis-rate-limiter.burstCapacity: 10
# 每次请求申请几个令牌
redis-rate-limiter.requestedTokens: 2
# IP 地址限流
key-resolver: "#{@remoteSessionKeyResolver}"
- id: noteMeta
uri: lb://noteCommonService
order: -1
predicates:
- Path=/note/{key:[abcdefhikmnopqstuvwxyz23456789]{16}}/noteMeta
- Method=GET
filters:
- ValidateNoteKey
- id: getNote
uri: lb://noteCommonService
order: -1
predicates:
- Path=/note/{key:[abcdefhikmnopqstuvwxyz23456789]{16}}
- Method=GET
filters:
- ValidateNoteKey
- id: saveNote
uri: lb://noteCommonService
order: -1
predicates:
- Path=/note/{key:[abcdefhikmnopqstuvwxyz23456789]{16}}
- Method=POST
filters:
- ValidateNoteKey
- id: deleteNote
uri: lb://noteCommonService
order: -1
predicates:
- Path=/note/{key:[abcdefhikmnopqstuvwxyz23456789]{16}}/delete
- Method=POST
filters:
- ValidateNoteKey
- id: secretKey
uri: lb://noteCommonService
order: -1
predicates:
- Path=/note/{key:[abcdefhikmnopqstuvwxyz23456789]{16}}/secretKey
- Method=POST
filters:
- ValidateNoteKey
- id: getNoteTxt
uri: lb://noteCommonService
order: -1
predicates:
- Path=/note/{key:[abcdefhikmnopqstuvwxyz23456789]{16}}.txt
- Method=GET
filters:
- ValidateNoteKey
management:
# server:
# address: 127.0.0.1
# port: 19000
endpoint:
shutdown:
enabled: true
health:
enabled: true
show-details: always
endpoints:
web:
base-path: /f2w8u47ie56edc93/actuator
exposure:
include: shutdown,health
logging:
level:
org.springframework.cloud.gateway: info
org.springframework.cloud.loadbalancer: info
org.springframework.web.reactive: info

View File

@@ -0,0 +1,11 @@
spring:
application:
name: flagnote-gateway
cloud:
config:
name: flagnote-gateway
profile: prd
uri: http://flagnote-config-01:8080/flagnote-config,http://flagnote-config-02:8080/flagnote-config
config:
import: optional:configserver:http://flagnote-config-01:8080/,optional:configserver:http://flagnote-config-02:8080/