一个基于 Java 和 Spring Boot 实现的轻量级消息队列系统,仿照 RabbitMQ 的设计理念,支持多种交换机类型和消息持久化。
- 多种交换机类型:支持 DIRECT、FANOUT、TOPIC 三种交换机
- 消息持久化:支持消息的磁盘持久化存储
- 虚拟主机:支持多虚拟主机隔离
- 消费者管理:支持自动确认和手动确认模式
- TCP 通信:基于 Socket 的客户端-服务器通信
- 数据库存储:使用 SQLite 存储元数据(交换机、队列、绑定关系)
- 后端框架:Spring Boot 2.x
- 数据库:SQLite + MyBatis
- 通信协议:自定义 TCP 协议
- 构建工具:Maven
- 测试框架:JUnit 5
src/
├── main/java/com/example/mq/
│ ├── mqserver/ # 服务器端实现
│ │ ├── core/ # 核心组件(交换机、队列、消息等)
│ │ ├── datacenter/ # 数据中心(内存和磁盘存储)
│ │ └── mapper/ # 数据库映射
│ ├── mqclient/ # 客户端实现
│ └── common/ # 公共组件
├── test/java/com/example/mq/ # 测试代码
└── resources/ # 配置文件
- JDK 8 或更高版本
- Maven 3.6 或更高版本
-
克隆项目
git clone https://github.com/superymr/RabbitMQ-Clone.git cd mq -
编译项目
mvn clean compile
-
运行测试
mvn test -
启动服务器
mvn spring-boot:run
BrokerServer brokerServer = new BrokerServer(9090);
brokerServer.start();ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(9090);
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();// 创建交换机
channel.exchangeDeclare("testExchange", ExchangeType.FANOUT, true, false, null);
// 创建队列
channel.queueDeclare("testQueue", true, false, false, null);
// 绑定队列到交换机
channel.queueBind("testQueue", "testExchange", "");// 发送消息
channel.basicPublish("testExchange", "", null, "Hello World".getBytes());
// 消费消息
channel.basicConsume("testQueue", true, new Consumer() {
@Override
public void handleDelivery(String consumerTag, BasicProperties properties, byte[] body) {
System.out.println("收到消息: " + new String(body));
}
});- 根据 routingKey 精确匹配队列
- 适用于点对点通信
- 将消息广播到所有绑定的队列
- 适用于发布-订阅模式
- 支持通配符匹配(* 和 #)
- 适用于复杂的路由场景
- 内存存储:消息存储在内存中,访问速度快
- 磁盘存储:支持消息持久化到磁盘文件
- 数据库存储:元数据存储在 SQLite 数据库中
项目包含完整的单元测试和集成测试:
# 运行所有测试
mvn test
# 运行特定测试类
mvn test -Dtest=VirtualHostTests
# 生成测试报告
mvn surefire-report:report欢迎提交 Issue 和 Pull Request!
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 Apache License 2.0 许可证 - 查看 LICENSE 文件了解详情。