mirror of
https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network.git
synced 2026-02-04 06:55:52 +08:00
[update] 添加文档
This commit is contained in:
893
开发指南.md
Normal file
893
开发指南.md
Normal file
@@ -0,0 +1,893 @@
|
||||
# Wu-Lazy-Cloud-Network 开发指南
|
||||
|
||||
## 🛠️ 开发环境搭建
|
||||
|
||||
### 环境要求
|
||||
|
||||
#### 基础环境
|
||||
- **操作系统**: Windows 10+ / macOS 10.15+ / Linux (Ubuntu 18.04+)
|
||||
- **Java**: JDK 24 (推荐) 或 JDK 17+
|
||||
- **Maven**: 3.6+
|
||||
- **IDE**: IntelliJ IDEA 2023.1+ (推荐) 或 Eclipse 2023-03+
|
||||
- **Git**: 2.30+
|
||||
|
||||
#### 数据库环境
|
||||
- **MySQL**: 8.0+ (生产环境)
|
||||
- **H2**: 2.1+ (开发环境)
|
||||
|
||||
#### 可选工具
|
||||
- **Docker**: 20.10+ (容器化部署)
|
||||
- **Docker Compose**: 2.0+ (多容器编排)
|
||||
- **Postman**: API 测试工具
|
||||
|
||||
### 环境配置
|
||||
|
||||
#### 1. Java 环境配置
|
||||
|
||||
```bash
|
||||
# 下载并安装 JDK 24
|
||||
# 设置 JAVA_HOME 环境变量
|
||||
export JAVA_HOME=/path/to/jdk-24
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
|
||||
# 验证安装
|
||||
java -version
|
||||
javac -version
|
||||
```
|
||||
|
||||
#### 2. Maven 环境配置
|
||||
|
||||
```bash
|
||||
# 下载并安装 Maven
|
||||
# 设置 MAVEN_HOME 环境变量
|
||||
export MAVEN_HOME=/path/to/maven
|
||||
export PATH=$MAVEN_HOME/bin:$PATH
|
||||
|
||||
# 验证安装
|
||||
mvn -version
|
||||
```
|
||||
|
||||
#### 3. IDE 配置
|
||||
|
||||
**IntelliJ IDEA 配置**:
|
||||
1. 安装 JDK 24
|
||||
2. 配置 Maven 设置
|
||||
3. 导入项目为 Maven 项目
|
||||
4. 配置代码风格和格式化规则
|
||||
|
||||
**Eclipse 配置**:
|
||||
1. 安装 Eclipse IDE for Enterprise Java Developers
|
||||
2. 配置 JDK 24
|
||||
3. 导入 Maven 项目
|
||||
4. 配置代码格式化规则
|
||||
|
||||
### 项目克隆
|
||||
|
||||
```bash
|
||||
# 克隆项目
|
||||
git clone https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network.git
|
||||
cd wu-lazy-cloud-network
|
||||
|
||||
# 切换到开发分支
|
||||
git checkout develop
|
||||
```
|
||||
|
||||
## 📁 项目结构
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
wu-lazy-cloud-network/
|
||||
├── pom.xml # 父模块 POM
|
||||
├── README.md # 项目说明
|
||||
├── 项目说明文档.md # 详细项目说明
|
||||
├── 使用文档.md # 使用指南
|
||||
├── 架构说明.md # 架构文档
|
||||
├── 开发指南.md # 本文档
|
||||
├── install.md # 安装指南
|
||||
├── Proxy.md # 代理使用指南
|
||||
├── version.md # 版本更新记录
|
||||
├── LICENSE # 许可证
|
||||
├── .gitignore # Git 忽略文件
|
||||
├── wu-lazy-cloud-heartbeat-common/ # 公共模块
|
||||
│ ├── pom.xml
|
||||
│ └── src/main/java/org/framework/lazy/cloud/network/heartbeat/common/
|
||||
│ ├── adapter/ # 适配器
|
||||
│ ├── advanced/ # 高级功能
|
||||
│ ├── allocator/ # 分配器
|
||||
│ ├── constant/ # 常量定义
|
||||
│ ├── context/ # 上下文
|
||||
│ ├── decoder/ # 解码器
|
||||
│ ├── encoder/ # 编码器
|
||||
│ ├── enums/ # 枚举
|
||||
│ ├── factory/ # 工厂类
|
||||
│ ├── filter/ # 过滤器
|
||||
│ ├── pool/ # 连接池
|
||||
│ ├── socket/ # Socket 相关
|
||||
│ ├── state/ # 状态管理
|
||||
│ └── utils/ # 工具类
|
||||
├── wu-lazy-cloud-heartbeat-server/ # 服务端模块
|
||||
│ ├── pom.xml
|
||||
│ └── src/main/java/org/framework/lazy/cloud/network/heartbeat/server/
|
||||
│ ├── cluster/ # 集群功能
|
||||
│ ├── config/ # 配置类
|
||||
│ ├── context/ # 上下文
|
||||
│ ├── init/ # 初始化
|
||||
│ ├── netty/ # Netty 相关
|
||||
│ ├── properties/ # 属性配置
|
||||
│ ├── standalone/ # 单机模式
|
||||
│ └── ui/ # 用户界面
|
||||
├── wu-lazy-cloud-heartbeat-client/ # 客户端模块
|
||||
│ ├── pom.xml
|
||||
│ └── src/main/java/org/framework/lazy/cloud/network/heartbeat/client/
|
||||
│ ├── application/ # 应用层
|
||||
│ ├── config/ # 配置类
|
||||
│ ├── context/ # 上下文
|
||||
│ ├── controller/ # 控制器
|
||||
│ ├── domain/ # 领域层
|
||||
│ ├── infrastructure/ # 基础设施层
|
||||
│ ├── netty/ # Netty 相关
|
||||
│ ├── rpc/ # RPC 相关
|
||||
│ └── ui/ # 用户界面
|
||||
├── wu-lazy-cloud-heartbeat-dns/ # DNS 模块
|
||||
│ ├── pom.xml
|
||||
│ └── src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/
|
||||
├── wu-lazy-cloud-heartbeat-protocol-proxy/ # 代理协议模块
|
||||
│ ├── pom.xml
|
||||
│ └── src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/
|
||||
│ ├── actuator/ # 执行器
|
||||
│ ├── advanced/ # 高级功能
|
||||
│ ├── auth/ # 认证
|
||||
│ ├── config/ # 配置
|
||||
│ ├── context/ # 上下文
|
||||
│ ├── demo/ # 示例
|
||||
│ ├── filter/ # 过滤器
|
||||
│ ├── handler/ # 处理器
|
||||
│ ├── init/ # 初始化
|
||||
│ ├── log/ # 日志
|
||||
│ ├── properties/ # 属性
|
||||
│ ├── route/ # 路由
|
||||
│ ├── socket5/ # SOCKS5
|
||||
│ ├── token/ # Token
|
||||
│ └── utils/ # 工具类
|
||||
└── wu-lazy-cloud-heartbeat-start/ # 启动模块
|
||||
├── pom.xml
|
||||
├── wu-lazy-cloud-heartbeat-server-start/ # 服务端启动
|
||||
├── wu-lazy-cloud-heartbeat-client-start/ # 客户端启动
|
||||
└── wu-lazy-cloud-heartbeat-server-cluster-start/ # 集群启动
|
||||
```
|
||||
|
||||
### 核心包结构
|
||||
|
||||
#### 1. Common 模块 (wu-lazy-cloud-heartbeat-common)
|
||||
|
||||
**核心类**:
|
||||
- `NettyMsg`: 网络消息基类
|
||||
- `ChannelContext`: 通道上下文基类
|
||||
- `NettyTransferChannelContext`: 传输通道上下文
|
||||
- `NettyVisitorPortContext`: 访客端口上下文
|
||||
- `NettyRealIdContext`: 真实连接上下文
|
||||
|
||||
**适配器**:
|
||||
- `NettyAdapter`: 网络适配器接口
|
||||
- `ProtocolAdapter`: 协议适配器接口
|
||||
|
||||
**工具类**:
|
||||
- `NettyUtils`: Netty 工具类
|
||||
- `ChannelUtils`: 通道工具类
|
||||
- `ProtocolUtils`: 协议工具类
|
||||
|
||||
#### 2. Server 模块 (wu-lazy-cloud-heartbeat-server)
|
||||
|
||||
**核心类**:
|
||||
- `NettyTcpServerSocketApplicationListener`: TCP 服务监听器
|
||||
- `LazyServerPermeateServerMappingApplication`: 服务端渗透应用
|
||||
- `NettyServerVirtualRouteApplication`: 虚拟路由应用
|
||||
|
||||
**配置类**:
|
||||
- `ServerAutoConfiguration`: 服务端自动配置
|
||||
- `ServerFlowConfiguration`: 流量控制配置
|
||||
|
||||
**初始化类**:
|
||||
- `InitServerSocket`: 服务端 Socket 初始化
|
||||
- `InitServerPermeateSocket`: 渗透 Socket 初始化
|
||||
- `InitServerProxySocket`: 代理 Socket 初始化
|
||||
|
||||
#### 3. Client 模块 (wu-lazy-cloud-heartbeat-client)
|
||||
|
||||
**核心类**:
|
||||
- `NettyClientSocketApplicationListener`: 客户端连接监听器
|
||||
- `LazyClientPermeateClientMappingApplication`: 客户端渗透应用
|
||||
- `NettyClientVirtualRouteApplication`: 客户端虚拟路由
|
||||
|
||||
**应用层**:
|
||||
- `LazyNettyClientApplication`: 客户端应用服务
|
||||
- `LazyNettyClientPermeateApplication`: 客户端渗透服务
|
||||
|
||||
**领域层**:
|
||||
- `LazyNettyClient`: 客户端实体
|
||||
- `LazyNettyClientPermeateMapping`: 客户端渗透映射
|
||||
|
||||
#### 4. Protocol Proxy 模块 (wu-lazy-cloud-heartbeat-protocol-proxy)
|
||||
|
||||
**核心类**:
|
||||
- `NettyHttpProxySocketApplicationListener`: HTTP 代理监听器
|
||||
- `NettySocketProxySocketApplicationListener`: SOCKS 代理监听器
|
||||
- `NettyTcpProxyFilter`: TCP 代理过滤器
|
||||
|
||||
**协议处理**:
|
||||
- `HttpProxyHandler`: HTTP 代理处理器
|
||||
- `SocksProxyHandler`: SOCKS 代理处理器
|
||||
- `ProxyAuthenticationHandler`: 代理认证处理器
|
||||
|
||||
## 🔧 开发规范
|
||||
|
||||
### 代码规范
|
||||
|
||||
#### 1. 命名规范
|
||||
|
||||
**类命名**:
|
||||
- 使用 PascalCase
|
||||
- 类名应该清晰表达其功能
|
||||
- 接口以 `I` 开头,抽象类以 `Abstract` 开头
|
||||
|
||||
```java
|
||||
// 正确示例
|
||||
public class NettyTcpServerSocketApplicationListener
|
||||
public interface INettyAdapter
|
||||
public abstract class AbstractNettyHandler
|
||||
|
||||
// 错误示例
|
||||
public class nettyServer
|
||||
public class NettyServer
|
||||
```
|
||||
|
||||
**方法命名**:
|
||||
- 使用 camelCase
|
||||
- 方法名应该清晰表达其功能
|
||||
- 布尔方法以 `is`、`has`、`can` 开头
|
||||
|
||||
```java
|
||||
// 正确示例
|
||||
public void startServer()
|
||||
public boolean isConnected()
|
||||
public boolean hasPermission()
|
||||
|
||||
// 错误示例
|
||||
public void start_server()
|
||||
public boolean connected()
|
||||
```
|
||||
|
||||
**变量命名**:
|
||||
- 使用 camelCase
|
||||
- 常量使用 UPPER_SNAKE_CASE
|
||||
- 避免使用单字母变量名
|
||||
|
||||
```java
|
||||
// 正确示例
|
||||
private String serverHost;
|
||||
private static final String DEFAULT_PORT = "8080";
|
||||
|
||||
// 错误示例
|
||||
private String host;
|
||||
private static final String port = "8080";
|
||||
```
|
||||
|
||||
#### 2. 代码结构
|
||||
|
||||
**包结构**:
|
||||
```
|
||||
org.framework.lazy.cloud.network.heartbeat.{module}
|
||||
├── application/ # 应用层
|
||||
├── domain/ # 领域层
|
||||
├── infrastructure/ # 基础设施层
|
||||
├── config/ # 配置类
|
||||
├── context/ # 上下文
|
||||
├── handler/ # 处理器
|
||||
├── filter/ # 过滤器
|
||||
└── utils/ # 工具类
|
||||
```
|
||||
|
||||
**类结构**:
|
||||
```java
|
||||
// 1. 包声明
|
||||
package org.framework.lazy.cloud.network.heartbeat.server;
|
||||
|
||||
// 2. 导入语句
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
// 3. 类注释
|
||||
/**
|
||||
* 服务端 TCP Socket 应用监听器
|
||||
*
|
||||
* @author 吴佳伟
|
||||
* @date 2024-01-01
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class NettyTcpServerSocketApplicationListener {
|
||||
|
||||
// 4. 常量定义
|
||||
private static final int DEFAULT_PORT = 7001;
|
||||
|
||||
// 5. 成员变量
|
||||
private final EventLoopGroup bossGroup;
|
||||
private final EventLoopGroup workerGroup;
|
||||
|
||||
// 6. 构造函数
|
||||
public NettyTcpServerSocketApplicationListener() {
|
||||
this.bossGroup = new NioEventLoopGroup();
|
||||
this.workerGroup = new NioEventLoopGroup();
|
||||
}
|
||||
|
||||
// 7. 公共方法
|
||||
public void start() {
|
||||
// 实现逻辑
|
||||
}
|
||||
|
||||
// 8. 私有方法
|
||||
private void initChannel() {
|
||||
// 实现逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 注释规范
|
||||
|
||||
**类注释**:
|
||||
```java
|
||||
/**
|
||||
* 服务端 TCP Socket 应用监听器
|
||||
*
|
||||
* 负责启动和管理服务端 TCP Socket 连接,处理客户端连接请求,
|
||||
* 并提供内网穿透和代理功能。
|
||||
*
|
||||
* @author 吴佳伟
|
||||
* @date 2024-01-01
|
||||
* @version 1.3.1
|
||||
*/
|
||||
```
|
||||
|
||||
**方法注释**:
|
||||
```java
|
||||
/**
|
||||
* 启动 TCP 服务器
|
||||
*
|
||||
* 初始化 Netty 服务器,绑定指定端口,开始监听客户端连接。
|
||||
* 如果启动失败,会抛出 RuntimeException。
|
||||
*
|
||||
* @param port 监听端口
|
||||
* @throws RuntimeException 启动失败时抛出
|
||||
*/
|
||||
public void startTcpServer(int port) {
|
||||
// 实现逻辑
|
||||
}
|
||||
```
|
||||
|
||||
**变量注释**:
|
||||
```java
|
||||
/** 服务端端口 */
|
||||
private int serverPort;
|
||||
|
||||
/** 客户端连接池 */
|
||||
private final ConnectionPool connectionPool;
|
||||
```
|
||||
|
||||
### 设计模式
|
||||
|
||||
#### 1. 工厂模式
|
||||
|
||||
```java
|
||||
/**
|
||||
* Netty 处理器工厂
|
||||
*/
|
||||
@Component
|
||||
public class NettyHandlerFactory {
|
||||
|
||||
/**
|
||||
* 创建 HTTP 代理处理器
|
||||
*/
|
||||
public NettyHttpProxyHandler createHttpProxyHandler() {
|
||||
return new NettyHttpProxyHandler();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建 SOCKS 代理处理器
|
||||
*/
|
||||
public NettySocksProxyHandler createSocksProxyHandler() {
|
||||
return new NettySocksProxyHandler();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 策略模式
|
||||
|
||||
```java
|
||||
/**
|
||||
* 协议处理策略接口
|
||||
*/
|
||||
public interface ProtocolStrategy {
|
||||
void handle(Channel channel, Object message);
|
||||
}
|
||||
|
||||
/**
|
||||
* HTTP 协议处理策略
|
||||
*/
|
||||
@Component
|
||||
public class HttpProtocolStrategy implements ProtocolStrategy {
|
||||
@Override
|
||||
public void handle(Channel channel, Object message) {
|
||||
// HTTP 协议处理逻辑
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* SOCKS 协议处理策略
|
||||
*/
|
||||
@Component
|
||||
public class SocksProtocolStrategy implements ProtocolStrategy {
|
||||
@Override
|
||||
public void handle(Channel channel, Object message) {
|
||||
// SOCKS 协议处理逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 观察者模式
|
||||
|
||||
```java
|
||||
/**
|
||||
* 连接事件监听器
|
||||
*/
|
||||
public interface ConnectionEventListener {
|
||||
void onConnect(Channel channel);
|
||||
void onDisconnect(Channel channel);
|
||||
void onError(Channel channel, Throwable cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* 连接事件管理器
|
||||
*/
|
||||
@Component
|
||||
public class ConnectionEventManager {
|
||||
private final List<ConnectionEventListener> listeners = new ArrayList<>();
|
||||
|
||||
public void addListener(ConnectionEventListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
public void notifyConnect(Channel channel) {
|
||||
listeners.forEach(listener -> listener.onConnect(channel));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 异常处理
|
||||
|
||||
#### 1. 自定义异常
|
||||
|
||||
```java
|
||||
/**
|
||||
* 网络连接异常
|
||||
*/
|
||||
public class NetworkConnectionException extends RuntimeException {
|
||||
|
||||
public NetworkConnectionException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public NetworkConnectionException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 协议解析异常
|
||||
*/
|
||||
public class ProtocolParseException extends RuntimeException {
|
||||
|
||||
public ProtocolParseException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public ProtocolParseException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 异常处理规范
|
||||
|
||||
```java
|
||||
/**
|
||||
* 网络连接管理器
|
||||
*/
|
||||
@Component
|
||||
public class NetworkConnectionManager {
|
||||
|
||||
/**
|
||||
* 建立连接
|
||||
*/
|
||||
public Channel connect(String host, int port) {
|
||||
try {
|
||||
// 连接逻辑
|
||||
return establishConnection(host, port);
|
||||
} catch (ConnectException e) {
|
||||
log.error("连接失败: {}:{}", host, port, e);
|
||||
throw new NetworkConnectionException("无法连接到服务器: " + host + ":" + port, e);
|
||||
} catch (Exception e) {
|
||||
log.error("连接过程中发生未知错误: {}:{}", host, port, e);
|
||||
throw new NetworkConnectionException("连接过程中发生未知错误", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 安全关闭连接
|
||||
*/
|
||||
public void safeClose(Channel channel) {
|
||||
if (channel != null && channel.isActive()) {
|
||||
try {
|
||||
channel.close().sync();
|
||||
} catch (Exception e) {
|
||||
log.warn("关闭连接时发生错误", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 测试规范
|
||||
|
||||
### 单元测试
|
||||
|
||||
#### 1. 测试框架
|
||||
|
||||
```xml
|
||||
<!-- 测试依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-junit-jupiter</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
#### 2. 测试类结构
|
||||
|
||||
```java
|
||||
/**
|
||||
* Netty 客户端连接测试
|
||||
*/
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class NettyClientConnectionTest {
|
||||
|
||||
@Mock
|
||||
private NettyClientProperties properties;
|
||||
|
||||
@Mock
|
||||
private LazyLambdaStream lazyLambdaStream;
|
||||
|
||||
@InjectMocks
|
||||
private NettyClientSocketApplicationListener listener;
|
||||
|
||||
@Test
|
||||
@DisplayName("客户端连接成功")
|
||||
void testClientConnectionSuccess() {
|
||||
// Given
|
||||
when(properties.getInetHost()).thenReturn("127.0.0.1");
|
||||
when(properties.getInetPort()).thenReturn(7001);
|
||||
|
||||
// When
|
||||
listener.doRunning();
|
||||
|
||||
// Then
|
||||
verify(lazyLambdaStream, times(1)).findList(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("客户端连接失败")
|
||||
void testClientConnectionFailure() {
|
||||
// Given
|
||||
when(properties.getInetHost()).thenReturn("invalid-host");
|
||||
|
||||
// When & Then
|
||||
assertThrows(NetworkConnectionException.class, () -> {
|
||||
listener.doRunning();
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 集成测试
|
||||
|
||||
```java
|
||||
/**
|
||||
* 服务端集成测试
|
||||
*/
|
||||
@SpringBootTest
|
||||
@TestPropertySource(properties = {
|
||||
"spring.lazy.netty.server.mode=standalone",
|
||||
"spring.lazy.netty.server.node-port=7001"
|
||||
})
|
||||
class ServerIntegrationTest {
|
||||
|
||||
@Autowired
|
||||
private NettyTcpServerSocketApplicationListener serverListener;
|
||||
|
||||
@Test
|
||||
@DisplayName("服务端启动成功")
|
||||
void testServerStartup() {
|
||||
// Given & When
|
||||
serverListener.doRunning();
|
||||
|
||||
// Then
|
||||
assertTrue(serverListener.isRunning());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 性能测试
|
||||
|
||||
#### 1. JMH 基准测试
|
||||
|
||||
```java
|
||||
/**
|
||||
* 网络传输性能测试
|
||||
*/
|
||||
@BenchmarkMode(Mode.Throughput)
|
||||
@OutputTimeUnit(TimeUnit.SECONDS)
|
||||
@State(Scope.Benchmark)
|
||||
public class NetworkTransferBenchmark {
|
||||
|
||||
private NettyTransferChannelContext transferContext;
|
||||
|
||||
@Setup
|
||||
public void setup() {
|
||||
transferContext = new NettyTransferChannelContext();
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public void testDataTransfer() {
|
||||
// 数据传输测试逻辑
|
||||
transferContext.transfer(createTestData());
|
||||
}
|
||||
|
||||
private byte[] createTestData() {
|
||||
return "test data".getBytes();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📦 构建和部署
|
||||
|
||||
### Maven 构建
|
||||
|
||||
#### 1. 编译项目
|
||||
|
||||
```bash
|
||||
# 清理并编译
|
||||
mvn clean compile
|
||||
|
||||
# 运行测试
|
||||
mvn test
|
||||
|
||||
# 打包
|
||||
mvn package -DskipTests
|
||||
|
||||
# 安装到本地仓库
|
||||
mvn install
|
||||
```
|
||||
|
||||
#### 2. 多模块构建
|
||||
|
||||
```bash
|
||||
# 构建所有模块
|
||||
mvn clean install -DskipTests
|
||||
|
||||
# 构建特定模块
|
||||
mvn clean install -pl wu-lazy-cloud-heartbeat-server -am
|
||||
|
||||
# 跳过测试构建
|
||||
mvn clean package -DskipTests
|
||||
```
|
||||
|
||||
### Docker 构建
|
||||
|
||||
#### 1. 服务端 Dockerfile
|
||||
|
||||
```dockerfile
|
||||
FROM registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-framework-parent:jdk-24-x64
|
||||
MAINTAINER wujiawei <1207537021@qq.com>
|
||||
|
||||
RUN echo "Asia/Shanghai" > /etc/timezone
|
||||
|
||||
ENV APP_JAR_NAME=$APP_NAME \
|
||||
JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseContainerSupport -XX:InitialRAMPercentage=50.0 -XX:MaxRAMPercentage=80.0 -Djdk.management.jfr.VmFlagRepository.useCgroups=false -Djava.security.egd=file:/dev/./urandom" \
|
||||
PARAMS=""
|
||||
|
||||
COPY target/*.jar /app.jar
|
||||
|
||||
ENTRYPOINT exec java -server $JAVA_OPTS -jar /app.jar $PARAMS
|
||||
```
|
||||
|
||||
#### 2. 客户端 Dockerfile
|
||||
|
||||
```dockerfile
|
||||
FROM registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-framework-parent:jdk-24-x64
|
||||
MAINTAINER wujiawei <1207537021@qq.com>
|
||||
|
||||
RUN echo "Asia/Shanghai" > /etc/timezone
|
||||
|
||||
ENV APP_JAR_NAME=$APP_NAME \
|
||||
JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseContainerSupport -XX:InitialRAMPercentage=50.0 -XX:MaxRAMPercentage=80.0 -Djdk.management.jfr.VmFlagRepository.useCgroups=false -Djava.security.egd=file:/dev/./urandom" \
|
||||
PARAMS=""
|
||||
|
||||
COPY target/*.jar /app.jar
|
||||
|
||||
ENTRYPOINT exec java -server $JAVA_OPTS -jar /app.jar $PARAMS
|
||||
```
|
||||
|
||||
### 部署脚本
|
||||
|
||||
#### 1. 开发环境部署
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# deploy-dev.sh
|
||||
|
||||
echo "开始部署开发环境..."
|
||||
|
||||
# 编译项目
|
||||
mvn clean package -DskipTests
|
||||
|
||||
# 启动服务端
|
||||
cd wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start
|
||||
nohup java -jar target/wu-lazy-cloud-heartbeat-server-start-1.3.1-JDK24.jar > server.log 2>&1 &
|
||||
|
||||
# 启动客户端
|
||||
cd ../wu-lazy-cloud-heartbeat-client-start
|
||||
nohup java -jar target/wu-lazy-cloud-heartbeat-client-start-1.3.1-JDK24.jar > client.log 2>&1 &
|
||||
|
||||
echo "部署完成!"
|
||||
```
|
||||
|
||||
#### 2. 生产环境部署
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# deploy-prod.sh
|
||||
|
||||
echo "开始部署生产环境..."
|
||||
|
||||
# 构建 Docker 镜像
|
||||
docker build -t wlcn-server:latest wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start/
|
||||
docker build -t wlcn-client:latest wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/
|
||||
|
||||
# 停止旧容器
|
||||
docker stop wlcn-server wlcn-client || true
|
||||
docker rm wlcn-server wlcn-client || true
|
||||
|
||||
# 启动新容器
|
||||
docker run -d --name wlcn-server -p 6001:6001 -p 7001:7001 -p 8001:8001 -p 9001:9001 wlcn-server:latest
|
||||
docker run -d --name wlcn-client --privileged -p 6004:6004 wlcn-client:latest
|
||||
|
||||
echo "部署完成!"
|
||||
```
|
||||
|
||||
## 🔍 调试技巧
|
||||
|
||||
### 日志配置
|
||||
|
||||
#### 1. 开发环境日志
|
||||
|
||||
```yaml
|
||||
# application-dev.yml
|
||||
logging:
|
||||
level:
|
||||
org.framework.lazy.cloud.network.heartbeat: DEBUG
|
||||
io.netty: DEBUG
|
||||
root: INFO
|
||||
pattern:
|
||||
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
|
||||
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
|
||||
file:
|
||||
name: logs/wlcn-dev.log
|
||||
```
|
||||
|
||||
#### 2. 生产环境日志
|
||||
|
||||
```yaml
|
||||
# application-prod.yml
|
||||
logging:
|
||||
level:
|
||||
org.framework.lazy.cloud.network.heartbeat: INFO
|
||||
io.netty: WARN
|
||||
root: WARN
|
||||
pattern:
|
||||
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
|
||||
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
|
||||
file:
|
||||
name: logs/wlcn-prod.log
|
||||
max-size: 100MB
|
||||
max-history: 30
|
||||
```
|
||||
|
||||
### 远程调试
|
||||
|
||||
#### 1. JVM 调试参数
|
||||
|
||||
```bash
|
||||
# 服务端调试
|
||||
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
|
||||
-jar wu-lazy-cloud-heartbeat-server-start-1.3.1-JDK24.jar
|
||||
|
||||
# 客户端调试
|
||||
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006 \
|
||||
-jar wu-lazy-cloud-heartbeat-client-start-1.3.1-JDK24.jar
|
||||
```
|
||||
|
||||
#### 2. Docker 调试
|
||||
|
||||
```bash
|
||||
# 启动带调试端口的容器
|
||||
docker run -d -p 6001:6001 -p 7001:7001 -p 5005:5005 \
|
||||
-e JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" \
|
||||
--name wlcn-server-debug wlcn-server:latest
|
||||
```
|
||||
|
||||
### 性能分析
|
||||
|
||||
#### 1. JProfiler 集成
|
||||
|
||||
```xml
|
||||
<!-- 添加 JProfiler 依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.jprofiler</groupId>
|
||||
<artifactId>jprofiler</artifactId>
|
||||
<version>13.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
#### 2. 内存分析
|
||||
|
||||
```bash
|
||||
# 生成堆转储
|
||||
jmap -dump:format=b,file=heap.hprof <pid>
|
||||
|
||||
# 分析堆转储
|
||||
jhat heap.hprof
|
||||
```
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
### 官方文档
|
||||
- [Spring Boot 官方文档](https://spring.io/projects/spring-boot)
|
||||
- [Netty 官方文档](https://netty.io/)
|
||||
- [Lazy ORM 文档](https://gitee.com/wujiawei1207537021/wu-framework-parent)
|
||||
|
||||
### 推荐书籍
|
||||
- 《Spring Boot 实战》
|
||||
- 《Netty 实战》
|
||||
- 《Java 并发编程实战》
|
||||
|
||||
### 在线资源
|
||||
- [Spring Boot 教程](https://spring.io/guides)
|
||||
- [Netty 教程](https://netty.io/wiki/)
|
||||
- [Java 并发编程](https://docs.oracle.com/javase/tutorial/essential/concurrency/)
|
||||
|
||||
---
|
||||
|
||||
**版本**: 1.3.1-JDK24
|
||||
**更新时间**: 2024年
|
||||
**维护者**: 吴佳伟
|
||||
Reference in New Issue
Block a user