Skip to content

About

仿RabbitMQ的消息交换队列

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

仿RabbitMQ的消息交换队列

一个基于 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 或更高版本

安装和运行

  1. 克隆项目

    git clone https://github.com/superymr/RabbitMQ-Clone.git
    cd mq
  2. 编译项目

    mvn clean compile
  3. 运行测试

    mvn test
  4. 启动服务器

    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));
    }
});

交换机类型

DIRECT(直连交换机)

  • 根据 routingKey 精确匹配队列
  • 适用于点对点通信

FANOUT(扇出交换机)

  • 将消息广播到所有绑定的队列
  • 适用于发布-订阅模式

TOPIC(主题交换机)

  • 支持通配符匹配(* 和 #)
  • 适用于复杂的路由场景

消息持久化

  • 内存存储:消息存储在内存中,访问速度快
  • 磁盘存储:支持消息持久化到磁盘文件
  • 数据库存储:元数据存储在 SQLite 数据库中

测试

项目包含完整的单元测试和集成测试:

# 运行所有测试
mvn test

# 运行特定测试类
mvn test -Dtest=VirtualHostTests

# 生成测试报告
mvn surefire-report:report

贡献

欢迎提交 Issue 和 Pull Request!

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

许可证

本项目采用 Apache License 2.0 许可证 - 查看 LICENSE 文件了解详情。

联系方式

About

仿RabbitMQ的消息交换队列

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages