引入nacos支持
All checks were successful
test/timeline-server/pipeline/head This commit looks good

This commit is contained in:
2026-01-05 15:21:26 +08:00
parent 182fb1f1f4
commit 640eb23bde
19 changed files with 176 additions and 100 deletions

View File

@@ -1,38 +1,6 @@
version: '3.8'
services:
# mysql:
# image: mysql:8.0
# container_name: timeline-mysql
# ports:
# - "33306:33306"
# environment:
# MYSQL_ROOT_PASSWORD: WoCloud@9ol7uj
# MYSQL_DATABASE: timeline
# volumes:
# - ./mysql-init:/docker-entrypoint-initdb.d
# - mysql_data:/var/lib/mysql
redis:
image: redis:7-alpine
container_name: timeline-redis
ports:
- "36379:6379"
command: redis-server --requirepass 123456
# minio:
# image: minio/minio:latest
# container_name: timeline-minio
# ports:
# - "9000:9000"
# - "9001:9001"
# environment:
# MINIO_ROOT_USER: 9ttSGjvQxek2uKKlhpqI
# MINIO_ROOT_PASSWORD: 12CaKew53tu94tgyDLoqAwAq32iDuz3SWW0O1hex
# command: server /data --console-address ":9001"
# volumes:
# - minio_data:/data
timeline-story-service:
build:
context: ./timeline-story-service
@@ -42,16 +10,14 @@ services:
- "30001:30001"
environment:
- server.port=30001
- spring.datasource.url=jdbc:mysql://mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.url=jdbc:mysql://timeline-mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.username=root
- spring.datasource.password=WoCloud@9ol7uj
- spring.data.redis.host=redis
- spring.data.redis.port=6379
- spring.data.redis.password=123456
- file.service.url=http://timeline-file-service:30002/file/
- user.service.url=http://timeline-user-service:30003/user/
depends_on:
- redis
- spring.cloud.nacos.discovery.server-addr=nacos-server:8848
- spring.cloud.nacos.config.server-addr=nacos-server:8848
restart: unless-stopped
timeline-file-service:
@@ -63,13 +29,15 @@ services:
- "30002:30002"
environment:
- server.port=30002
- spring.datasource.url=jdbc:mysql://mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.url=jdbc:mysql://timeline-mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.username=root
- spring.datasource.password=WoCloud@9ol7uj
- minio.endpoint=http://minio:9000
- minio.endpoint=http://timeline-minio:9000
- minio.accessKey=9ttSGjvQxek2uKKlhpqI
- minio.secretKey=12CaKew53tu94tgyDLoqAwAq32iDuz3SWW0O1hex
- minio.bucketName=timeline-test
- spring.cloud.nacos.discovery.server-addr=nacos-server:8848
- spring.cloud.nacos.config.server-addr=nacos-server:8848
restart: unless-stopped
timeline-user-service:
@@ -81,12 +49,14 @@ services:
- "30003:30003"
environment:
- server.port=30003
- spring.datasource.url=jdbc:mysql://mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.url=jdbc:mysql://timeline-mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.username=root
- spring.datasource.password=WoCloud@9ol7uj
- spring.data.redis.host=redis
- spring.data.redis.port=6379
- spring.data.redis.password=123456
- spring.cloud.nacos.discovery.server-addr=nacos-server:8848
- spring.cloud.nacos.config.server-addr=nacos-server:8848
restart: unless-stopped
timeline-gateway-service:
@@ -98,31 +68,13 @@ services:
- "30000:30000"
environment:
- server.port=30000
- spring.cloud.gateway.routes[0].id=story-service
- spring.cloud.gateway.routes[0].uri=http://timeline-story-service:30001
- spring.cloud.gateway.routes[0].predicates[0]=Path=/story/**
- spring.cloud.gateway.routes[0].filters[0]=StripPrefix=0
- spring.cloud.gateway.routes[1].id=file-service
- spring.cloud.gateway.routes[1].uri=http://timeline-file-service:30002
- spring.cloud.gateway.routes[1].predicates[0]=Path=/file/**
- spring.cloud.gateway.routes[1].filters[0]=StripPrefix=0
- spring.cloud.gateway.routes[2].id=user-service
- spring.cloud.gateway.routes[2].uri=http://timeline-user-service:30003
- spring.cloud.gateway.routes[2].predicates[0]=Path=/user/**
- spring.cloud.gateway.routes[2].filters[0]=StripPrefix=0
- spring.cloud.gateway.routes[3].id=user-service-ws
- spring.cloud.gateway.routes[3].uri=http://timeline-user-service:30003
- spring.cloud.gateway.routes[3].predicates[0]=Path=/user/ws/**
- spring.cloud.gateway.routes[3].filters[0]=StripPrefix=0
- spring.datasource.url=jdbc:mysql://mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.cloud.nacos.discovery.server-addr=nacos-server:8848
- spring.cloud.nacos.config.server-addr=nacos-server:8848
- spring.datasource.url=jdbc:mysql://timeline-mysql:3306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
- spring.datasource.username=root
- spring.datasource.password=WoCloud@9ol7uj
depends_on:
- timeline-story-service
- timeline-file-service
- timeline-user-service
restart: unless-stopped
volumes:
mysql_data:
minio_data:
restart: unless-stopped

17
pom.xml
View File

@@ -28,7 +28,10 @@
<properties>
<java.version>21</java.version>
<spring-cloud.version>2023.0.5</spring-cloud.version> <!-- Spring Cloud 版本 -->
<spring-cloud-alibaba.version>2023.0.5.0</spring-cloud-alibaba.version>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
@@ -41,6 +44,14 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
@@ -55,6 +66,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>21</source>
<target>21</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
@@ -77,4 +90,4 @@
</plugin>
</plugins>
</build>
</project>
</project>

View File

@@ -29,6 +29,17 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
@@ -103,4 +114,4 @@
</plugin>
</plugins>
</build>
</project>
</project>

View File

@@ -3,16 +3,18 @@ package com.timeline.file;
import com.timeline.file.config.MinioConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan({"com.timeline", "com.timeline.file"})
@EnableConfigurationProperties(MinioConfig.class)
@EnableDiscoveryClient
public class TimelineFileServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TimelineFileServiceApplication.class, args);
}
}
}

View File

@@ -1,15 +1,15 @@
spring.application.name=timeline.file
spring.application.name=timeline-file
spring.datasource.url=jdbc:mysql://59.80.22.43:33306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=WoCloud@9ol7uj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# MinIO ??
# MinIO 配置
minio.endpoint=http://59.80.22.43:9000
minio.accessKey=9ttSGjvQxek2uKKlhpqI
minio.secretKey=12CaKew53tu94tgyDLoqAwAq32iDuz3SWW0O1hex
minio.bucketName=timeline-test
# MyBatis ??
# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.timeline.file.entity
@@ -21,6 +21,10 @@ spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=1000MB
spring.servlet.multipart.max-request-size=1000MB
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
# Ensure UTF-8 encoding for logs and web layer to avoid garbled Chinese output
logging.charset.console=UTF-8
logging.charset.file=UTF-8

View File

@@ -0,0 +1,15 @@
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=public
spring.cloud.nacos.discovery.group=DEFAULT_GROUP
# Nacos配置中心
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
spring.cloud.nacos.config.namespace=${spring.cloud.nacos.discovery.namespace}
spring.cloud.nacos.config.group=${spring.cloud.nacos.discovery.group}
spring.cloud.nacos.config.file-extension=properties
# 如果需要从Nacos配置中心加载配置文件取消下面的注释
# spring.cloud.nacos.config.shared-configs[0].data-id=common.properties
# spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
# spring.cloud.nacos.config.shared-configs[0].refresh=true

View File

@@ -30,6 +30,16 @@
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- JWT支持 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
@@ -76,4 +86,4 @@
</plugin>
</plugins>
</build>
</project>
</project>

View File

@@ -2,36 +2,31 @@
spring.application.name=timeline-gateway
server.port=30000
spring.datasource.url=jdbc:mysql://59.80.22.43:33306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=WoCloud@9ol7uj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
#
# 使用Nacos服务发现进行路由
spring.cloud.gateway.routes[0].id=story-service
spring.cloud.gateway.routes[0].uri=http://localhost:30001
spring.cloud.gateway.routes[0].uri=lb://timeline-story
spring.cloud.gateway.routes[0].predicates[0]=Path=/story/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=0
spring.cloud.gateway.routes[1].id=file-service
spring.cloud.gateway.routes[1].uri=http://localhost:30002
spring.cloud.gateway.routes[1].uri=lb://timeline-file
spring.cloud.gateway.routes[1].predicates[0]=Path=/file/**
spring.cloud.gateway.routes[1].filters[0]=StripPrefix=0
spring.cloud.gateway.routes[2].id=user-service-ws
spring.cloud.gateway.routes[2].uri=http://localhost:30003
spring.cloud.gateway.routes[2].uri=lb://timeline-user
spring.cloud.gateway.routes[2].predicates[0]=Path=/user/ws/**
spring.cloud.gateway.routes[2].filters[0]=StripPrefix=0
spring.cloud.gateway.routes[3].id=user-service
spring.cloud.gateway.routes[3].uri=http://localhost:30003
spring.cloud.gateway.routes[3].uri=lb://timeline-user
spring.cloud.gateway.routes[3].predicates[0]=Path=/user/**
spring.cloud.gateway.routes[3].filters[0]=StripPrefix=0
# JWT配置
jwt.secret=6f3f9c2b9d9a4e3f8c0d6a7b5c4e3f1a6f3f9c2b9d9a4e3f8c0d6a7b5c4e3f1a
jwt.expiration=86400
@@ -48,4 +43,4 @@ management.endpoint.health.show-details=always
# 日志配置
logging.level.org.springframework.cloud.gateway=DEBUG
logging.level.com.timeline.gateway=DEBUG
logging.level.com.timeline.gateway=DEBUG

View File

@@ -0,0 +1,15 @@
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=public
spring.cloud.nacos.discovery.group=DEFAULT_GROUP
# Nacos配置中心
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
spring.cloud.nacos.config.namespace=${spring.cloud.nacos.discovery.namespace}
spring.cloud.nacos.config.group=${spring.cloud.nacos.discovery.group}
spring.cloud.nacos.config.file-extension=properties
# 如果需要从Nacos配置中心加载配置文件取消下面的注释
# spring.cloud.nacos.config.shared-configs[0].data-id=common.properties
# spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
# spring.cloud.nacos.config.shared-configs[0].refresh=true

View File

@@ -62,6 +62,17 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 数据库相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@@ -1,14 +1,16 @@
package com.timeline.story;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.timeline"})
@EnableFeignClients(basePackages = {"com.timeline"})
@EnableDiscoveryClient
public class TimelineStoryServiceApplication {
public static void main(String[] args) {
org.springframework.boot.SpringApplication.run(TimelineStoryServiceApplication.class, args);
}
}
}

View File

@@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@FeignClient(name = "timeline.file", url = "${file.service.url}")
@FeignClient(name = "timeline.file")
public interface FileServiceClient {
@PostMapping(value = "/upload-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@@ -26,4 +26,4 @@ public interface FileServiceClient {
@GetMapping("/story-item/images/{storyItemId}")
ResponseEntity<List<String>> getStoryItemImages(@PathVariable String storyItemId);
}
}

View File

@@ -8,12 +8,11 @@ import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
import java.util.Map;
@FeignClient(name = "timeline.user", url = "${user.service.url}")
@FeignClient(name = "timeline.user")
public interface UserServiceClient {
@GetMapping("/user/friend/ids")
ResponseEntity<List<String>> getFriendIds();
@GetMapping("/{userId}")
ResponseEntity<Map> getUserByUserId(@PathVariable String userId);
}
}

View File

@@ -1,9 +1,9 @@
spring.application.name=timeline.story
spring.application.name=timeline-story
spring.datasource.url=jdbc:mysql://59.80.22.43:33306/timeline?serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=WoCloud@9ol7uj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# MyBatis ??
# MyBatis 配置
mybatis.configuration.log4j=true
server.port=30001
spring.web.mvc.use-trailing-slash=true
@@ -14,13 +14,10 @@ mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.timeline.user.dao=DEBUG
logging.level.org.mybatis=DEBUG
# LocalDateTime ???????
# LocalDateTime 序列化配置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=UTC
file.service.url=http://localhost:30002/file/
user.service.url=http://localhost:30003/user/
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=1000MB
spring.servlet.multipart.max-request-size=1000MB
@@ -30,6 +27,10 @@ spring.data.redis.port=36379
spring.data.redis.password=123456
spring.data.redis.timeout=5000
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
# HikariCP tuning to avoid stale/closed MySQL connections
spring.datasource.hikari.max-lifetime=600000
# 10 minutes, below MySQL wait_timeout
@@ -49,4 +50,4 @@ logging.charset.file=UTF-8
server.tomcat.uri-encoding=UTF-8
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.force=true

View File

@@ -0,0 +1,15 @@
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=public
spring.cloud.nacos.discovery.group=DEFAULT_GROUP
# Nacos配置中心
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
spring.cloud.nacos.config.namespace=${spring.cloud.nacos.discovery.namespace}
spring.cloud.nacos.config.group=${spring.cloud.nacos.discovery.group}
spring.cloud.nacos.config.file-extension=properties
# 如果需要从Nacos配置中心加载配置文件取消下面的注释
# spring.cloud.nacos.config.shared-configs[0].data-id=common.properties
# spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
# spring.cloud.nacos.config.shared-configs[0].refresh=true

View File

@@ -44,6 +44,16 @@
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
@@ -116,4 +126,4 @@
</plugin>
</plugins>
</build>
</project>
</project>

View File

@@ -2,13 +2,15 @@ package com.timeline.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan({"com.timeline", "com.timeline.user"})
public class TimelineUserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TimelineUserServiceApplication.class, args);
}
}
}

View File

@@ -1,4 +1,4 @@
spring.application.name=timeline.user
spring.application.name=timeline-user
server.port=30003
# 数据库配置
@@ -31,6 +31,10 @@ spring.data.redis.port=36379
spring.data.redis.password=123456
spring.data.redis.timeout=5000
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
# 连接池
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=2

View File

@@ -0,0 +1,15 @@
# Nacos配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=public
spring.cloud.nacos.discovery.group=DEFAULT_GROUP
# Nacos配置中心
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
spring.cloud.nacos.config.namespace=${spring.cloud.nacos.discovery.namespace}
spring.cloud.nacos.config.group=${spring.cloud.nacos.discovery.group}
spring.cloud.nacos.config.file-extension=properties
# 如果需要从Nacos配置中心加载配置文件取消下面的注释
# spring.cloud.nacos.config.shared-configs[0].data-id=common.properties
# spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
# spring.cloud.nacos.config.shared-configs[0].refresh=true