parent
43f0c9a5c4
commit
be03878e94
@ -0,0 +1,49 @@ |
||||
# Wusthelper-backend |
||||
|
||||
武科大助手后端项目 |
||||
|
||||
应该是第三代后端了吧。 |
||||
|
||||
新的重写过的后端,其实在这版正式出来之前已经有很多个实验性的原型版本了,但是都因为效果不如意胎死腹中给砍了,没有继续写下去(其实这个readme也是曾经最早的一个原型版本改来的) |
||||
|
||||
这代后端结构与前面的有很大不同,使用了真·多模块的方式运行部署,部分独立模块以不同的程序运行,子模块部署在内网时,可以自动注册frpc进行服务远程转发,主服务和子服务通过http进行通信调用,各模块可以部署在不同的服务器或容器中,当然,也可以挤在一起跑。 |
||||
|
||||
因为基于http的json通信,因此可以跨语言语言进行调用这些子服务,若某个模块使用某种语言有比较大的优势(如网关服务可用go或node等进行开发),可以尝试直接用其他语言进行替换,只需要开发时遵循文档即可 |
||||
~~(虽然现在并没有什么文档之类的(但是以后会补上来的啦))~~。 |
||||
|
||||
当某模块更新或下线时,可以在不重启整个项目的情况下进行更新,同时如果有多个实例部署,可及时切换到可用节点上,从而避免整个项目的完全重启而导致服务完全中断,只要对外api网关模块仍在运行,就可使用仍在运行的模块继续提供一定的服务,提高可用性,同时由于各个模块被拆分,因此相较于以前更为轻量,在模块更新或重启时也能更快的恢复服务 |
||||
|
||||
该项目意在探索新技术,同时提高后端服务的可用性 |
||||
|
||||
@lensferno |
||||
|
||||
--- |
||||
|
||||
## 环境要求 |
||||
|
||||
包管理和构建: |
||||
Maven 3.8.2+ |
||||
- 后续可能会看情况转用Gradle |
||||
|
||||
Java版本: |
||||
Java 17+ |
||||
|
||||
--- |
||||
|
||||
## 项目模块结构 |
||||
|
||||
### agent-service |
||||
|
||||
--- |
||||
|
||||
## 关于Mywust库的导入问题 |
||||
|
||||
--- |
||||
|
||||
## 文档 |
||||
|
||||
详见[doc](/doc) |
||||
|
||||
--- |
||||
|
||||
就先这样吧,手累了 |
@ -1,4 +1,4 @@ |
||||
package cn.wustlinghang; |
||||
package cn.wustlinghang.data; |
||||
|
||||
public class Main { |
||||
public static void main(String[] args) { |
@ -1,41 +1,41 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<groupId>cn.wustlinghang.wusthelper</groupId> |
||||
<artifactId>web</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>jakarta.annotation</groupId> |
||||
<artifactId>jakarta.annotation-api</artifactId> |
||||
<version>2.1.1</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>javax.annotation</groupId> |
||||
<artifactId>javax.annotation-api</artifactId> |
||||
<version>1.3.2</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<version>1.18.26</version> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
<repositories> |
||||
<repository> |
||||
<id>central</id> |
||||
<url>https://repo1.maven.org/maven2</url> |
||||
</repository> |
||||
<repository> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
</snapshots> |
||||
<id>github</id> |
||||
<url>https://maven.pkg.github.com/LingHangStudio/mywust</url> |
||||
</repository> |
||||
</repositories> |
||||
</project> |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<groupId>cn.wustlinghang.wusthelper</groupId> |
||||
<artifactId>web</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>jakarta.annotation</groupId> |
||||
<artifactId>jakarta.annotation-api</artifactId> |
||||
<version>2.1.1</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>javax.annotation</groupId> |
||||
<artifactId>javax.annotation-api</artifactId> |
||||
<version>1.3.2</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<version>1.18.26</version> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
<repositories> |
||||
<repository> |
||||
<id>central</id> |
||||
<url>https://repo1.maven.org/maven2</url> |
||||
</repository> |
||||
<repository> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
</snapshots> |
||||
<id>github</id> |
||||
<url>https://maven.pkg.github.com/LingHangStudio/mywust</url> |
||||
</repository> |
||||
</repositories> |
||||
</project> |
@ -0,0 +1,38 @@ |
||||
target/ |
||||
!.mvn/wrapper/maven-wrapper.jar |
||||
!**/src/main/**/target/ |
||||
!**/src/test/**/target/ |
||||
|
||||
### IntelliJ IDEA ### |
||||
.idea/modules.xml |
||||
.idea/jarRepositories.xml |
||||
.idea/compiler.xml |
||||
.idea/libraries/ |
||||
*.iws |
||||
*.iml |
||||
*.ipr |
||||
|
||||
### Eclipse ### |
||||
.apt_generated |
||||
.classpath |
||||
.factorypath |
||||
.project |
||||
.settings |
||||
.springBeans |
||||
.sts4-cache |
||||
|
||||
### NetBeans ### |
||||
/nbproject/private/ |
||||
/nbbuild/ |
||||
/dist/ |
||||
/nbdist/ |
||||
/.nb-gradle/ |
||||
build/ |
||||
!**/src/main/**/build/ |
||||
!**/src/test/**/build/ |
||||
|
||||
### VS Code ### |
||||
.vscode/ |
||||
|
||||
### Mac OS ### |
||||
.DS_Store |
@ -0,0 +1,98 @@ |
||||
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>cn.wustlinghang.wusthelper</groupId> |
||||
<artifactId>backend-main</artifactId> |
||||
<version>${revision}</version> |
||||
</parent> |
||||
|
||||
<artifactId>backend-web</artifactId> |
||||
|
||||
<properties> |
||||
<maven.compiler.source>17</maven.compiler.source> |
||||
<maven.compiler.target>17</maven.compiler.target> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
|
||||
<springboot.version>3.1.1</springboot.version> |
||||
<snakeyaml.version>2.0</snakeyaml.version> |
||||
<feign.version>4.0.3</feign.version> |
||||
</properties> |
||||
|
||||
<dependencyManagement> |
||||
<dependencies> |
||||
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies --> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-dependencies</artifactId> |
||||
<version>${springboot.version}</version> |
||||
<type>pom</type> |
||||
<scope>import</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
</dependencyManagement> |
||||
|
||||
<dependencies> |
||||
<!-- 清除springboot的依赖引入的漏洞警告,直接提升版本消除 --> |
||||
<dependency> |
||||
<groupId>org.yaml</groupId> |
||||
<artifactId>snakeyaml</artifactId> |
||||
<version>${snakeyaml.version}</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-validation</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-web</artifactId> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.springframework.cloud</groupId> |
||||
<artifactId>spring-cloud-starter-openfeign</artifactId> |
||||
<version>${feign.version}</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>com.mysql</groupId> |
||||
<artifactId>mysql-connector-j</artifactId> |
||||
<scope>runtime</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<optional>true</optional> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.graalvm.buildtools</groupId> |
||||
<artifactId>native-maven-plugin</artifactId> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
<configuration> |
||||
<excludes> |
||||
<exclude> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
</exclude> |
||||
</excludes> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
</project> |
@ -1,7 +0,0 @@ |
||||
package cn.wustlinghang; |
||||
|
||||
public class Main { |
||||
public static void main(String[] args) { |
||||
System.out.println("Hello world!"); |
||||
} |
||||
} |
@ -1,6 +1,4 @@ |
||||
package cn.wustlinghang.wusthelper.internal.graduate.exception; |
||||
|
||||
import cn.wustlinghang.wusthelper.rpc.exception.RpcException; |
||||
package cn.wustlinghang.wusthelper.internal.rpc.exception; |
||||
|
||||
import java.util.StringJoiner; |
||||
|
@ -1,6 +1,4 @@ |
||||
package cn.wustlinghang.wusthelper.internal.physics.exception; |
||||
|
||||
import cn.wustlinghang.wusthelper.rpc.exception.RpcException; |
||||
package cn.wustlinghang.wusthelper.internal.rpc.exception; |
||||
|
||||
import java.util.StringJoiner; |
||||
|
@ -1,4 +1,4 @@ |
||||
package cn.wustlinghang.wusthelper.rpc.exception; |
||||
package cn.wustlinghang.wusthelper.internal.rpc.exception; |
||||
|
||||
public class RpcException extends RuntimeException { |
||||
protected final int code; |
@ -1,63 +1,43 @@ |
||||
/* |
||||
* Class created by lensfrex. |
||||
*/ |
||||
|
||||
package cn.wustlinghang.wusthelper.rpc.response; |
||||
|
||||
public enum ResponseCode { |
||||
SUCCESS(20000, "成功"), |
||||
REQUEST_TOO_FAST(20001, "技能冷却中..."), |
||||
INVALID_REQUEST(30000, "非法请求"), |
||||
PARAM_WRONG(30001, "参数错误"), |
||||
PERMISSION_DENIED(40000, "权限不足"), |
||||
TOKEN_EXPIRED(40001, "token过期"), |
||||
TOKEN_INVALID(40002, "token无效"), |
||||
SERVER_INTERNAL_ERROR(50000, "服务器内部错误"), |
||||
API_NOT_IMPLEMENT(0, "接口未实现"), |
||||
|
||||
STUDENT_ID_DOES_NOT_EXISTS(60001,"学生学号不存在"), |
||||
USER_WAS_BANNED_PUBLISH(60201, "用户被禁止发布告示信息"), |
||||
IMAGE_FORMAT_WORN(60202, "上传的图片格式有误"), |
||||
NOTICE_WAS_INTERCEPT(60203, "消息被系统拦截发布"), |
||||
|
||||
USER_DOES_NOT_MATCH_PUBLISHER(60301, "请求用户与告示发表者不匹配"), |
||||
|
||||
REQUEST_FILE_DOES_NOT_EXIST(60701, "请求的文件不存在"); |
||||
|
||||
private final int code; |
||||
|
||||
private final String message; |
||||
|
||||
ResponseCode(int code, String message) { |
||||
this.code = code; |
||||
this.message = message; |
||||
} |
||||
|
||||
public int getCode() { |
||||
return code; |
||||
} |
||||
|
||||
public String getMessage() { |
||||
return message; |
||||
} |
||||
} |
||||
|
||||
|
||||
enum Code { |
||||
Success, Fail, Wron |
||||
} |
||||
|
||||
class Singleton { |
||||
private static Singleton instance; |
||||
|
||||
private Singleton() { |
||||
} |
||||
|
||||
public static Singleton getInstance() { |
||||
if (instance == null) { |
||||
instance = new Singleton(); |
||||
} |
||||
|
||||
return instance; |
||||
} |
||||
/* |
||||
* Class created by lensfrex. |
||||
*/ |
||||
|
||||
package cn.wustlinghang.wusthelper.internal.rpc.response; |
||||
|
||||
public enum ResponseCode { |
||||
SUCCESS(20000, "成功"), |
||||
REQUEST_TOO_FAST(20001, "技能冷却中..."), |
||||
INVALID_REQUEST(30000, "非法请求"), |
||||
PARAM_WRONG(30001, "参数错误"), |
||||
PERMISSION_DENIED(40000, "权限不足"), |
||||
TOKEN_EXPIRED(40001, "token过期"), |
||||
TOKEN_INVALID(40002, "token无效"), |
||||
SERVER_INTERNAL_ERROR(50000, "服务器内部错误"), |
||||
API_NOT_IMPLEMENT(0, "接口未实现"), |
||||
|
||||
STUDENT_ID_DOES_NOT_EXISTS(60001,"学生学号不存在"), |
||||
USER_WAS_BANNED_PUBLISH(60201, "用户被禁止发布告示信息"), |
||||
IMAGE_FORMAT_WORN(60202, "上传的图片格式有误"), |
||||
NOTICE_WAS_INTERCEPT(60203, "消息被系统拦截发布"), |
||||
|
||||
USER_DOES_NOT_MATCH_PUBLISHER(60301, "请求用户与告示发表者不匹配"), |
||||
|
||||
REQUEST_FILE_DOES_NOT_EXIST(60701, "请求的文件不存在"); |
||||
|
||||
private final int code; |
||||
|
||||
private final String message; |
||||
|
||||
ResponseCode(int code, String message) { |
||||
this.code = code; |
||||
this.message = message; |
||||
} |
||||
|
||||
public int getCode() { |
||||
return code; |
||||
} |
||||
|
||||
public String getMessage() { |
||||
return message; |
||||
} |
||||
} |
@ -1,4 +1,4 @@ |
||||
package cn.wustlinghang.wusthelper.rpc.response; |
||||
package cn.wustlinghang.wusthelper.internal.rpc.response; |
||||
|
||||
public record RpcResponse<T>(int code, String msg, T data) { |
||||
public static <T> RpcResponse<T> success(T data) { |
@ -1,4 +1,4 @@ |
||||
package cn.wustlinghang.wusthelper.rpc.util; |
||||
package cn.wustlinghang.wusthelper.internal.rpc.util; |
||||
|
||||
public class EnumUtil { |
||||
public static <E extends Enum<E>> boolean equal(int value, Enum<E> e) { |
@ -1,20 +0,0 @@ |
||||
package cn.wustlinghang.wusthelper.rpc.request; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
@Data |
||||
public class RpcRequest { |
||||
private final Map<String, String> arg; |
||||
|
||||
public RpcRequest() { |
||||
this.arg = new HashMap<>(); |
||||
} |
||||
|
||||
public RpcRequest addArg(String key, String value) { |
||||
this.arg.put(key, value); |
||||
return this; |
||||
} |
||||
} |
@ -1 +1 @@ |
||||
Subproject commit a18aa81d71123f54e959866e93c7ceb56b03ade4 |
||||
Subproject commit 965562b69e35d445fb5c58b2e2afd9cdf27d3146 |
@ -1,8 +0,0 @@ |
||||
package cn.wustlinghang.wusthelper.internal.library.services; |
||||
|
||||
import jakarta.enterprise.context.ApplicationScoped; |
||||
|
||||
@ApplicationScoped |
||||
public class ParseService { |
||||
|
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue