# Press Monster Agent 基于SkyWalking技术栈的压测平台Java Agent,支持热插拔的RestController拦截插件。 ## 项目结构 ``` press-monster-java/ ├── press-monster-common/ # 通用组件和插件框架 ├── press-monster-core/ # Agent核心和插件管理 ├── press-monster-plugins/ # 插件管理目录 │ └── spring-plugins/ # Spring框架相关插件 │ └── mvc-plugin/ # Spring MVC拦截插件 ├── press-monster-test/ # 测试和demo项目 ├── press-monster-assembly/ # 打包和分发配置 └── press-monster-agent/ # 构建输出目录(运行时生成) ├── press-monster-agent.jar # 主agent文件 ├── plugins/ # 插件目录 │ └── mvc-plugin-1.0.0-SNAPSHOT.jar ├── agent.properties # 配置文件 ├── agent-usage.md # 使用说明 └── README.md # 项目说明 ``` ## 快速开始 ### 构建项目 ```bash mvn clean package -DskipTests ``` 构建完成后,会在项目根目录生成 `press-monster-agent` 目录,包含所有必要的agent文件。 ### 使用Agent 将agent添加到Java应用启动参数: ```bash java -javaagent:press-monster-agent/press-monster-agent.jar your-application.jar ``` ### 配置 在 `agent.properties` 中可以配置: ```properties # 插件目录 press.monster.plugin.directory=./plugins # 插件热更新 press.monster.plugin.hotswap.enabled=false # MVC插件开关 press.monster.plugin.mvc.enabled=true ``` ## 核心特性 - **ByteBuddy字节码操作**: 动态拦截和修改方法执行 - **插件化架构**: 支持SPI机制的插件加载 - **热插拔支持**: 运行时动态加载和卸载插件 - **RestController拦截**: 自动收集REST API调用信息 - **SkyWalking兼容**: 采用类似SkyWalking的目录结构和配置方式 ## 开发说明 ### 模块说明 - **press-monster-common**: 提供插件框架、SPI机制、日志工具等通用组件 - **press-monster-core**: Agent主程序,负责插件管理和字节码增强 - **press-monster-plugins**: 各种插件的实现,按框架分类 - **press-monster-test**: 测试用例和演示应用 - **press-monster-assembly**: Maven Assembly配置,用于生成分发包 ### 添加新插件 1. 在 `press-monster-plugins` 下创建新的插件目录 2. 实现 `TransformerPlugin` 接口 3. 在 `META-INF/services` 中注册插件 4. 更新 `press-monster-assembly` 的依赖配置 ### 清理构建 ```bash # 清理所有target目录 mvn clean # 手动删除生成的agent目录 rm -rf press-monster-agent mvn clean install ```