# mq-demo **Repository Path**: baidu1949/mq ## Basic Information - **Project Name**: mq-demo - **Description**: mq中间件入门 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-05 - **Last Updated**: 2025-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MQ中间件学习项目 这是一个用于学习主流MQ中间件的Java项目,基于JDK8和Spring Boot 2.7.18构建。 ## 项目结构 ``` mq-learning/ ├── common/ # 公共模块 │ ├── src/main/java/com/mqstudy/common/ │ │ ├── model/ # 消息模型 │ │ └── util/ # 工具类 ├── rabbitmq-demo/ # RabbitMQ示例 │ ├── src/main/java/com/mqstudy/rabbitmq/ │ │ ├── config/ # 配置类 │ │ ├── producer/ # 生产者 │ │ ├── consumer/ # 消费者 │ │ └── controller/ # 控制器 ├── kafka-demo/ # Kafka示例 │ ├── src/main/java/com/mqstudy/kafka/ │ │ ├── config/ # 配置类 │ │ ├── producer/ # 生产者 │ │ └── consumer/ # 消费者 ├── rocketmq-demo/ # RocketMQ示例 │ ├── src/main/java/com/mqstudy/rocketmq/ │ │ ├── producer/ # 生产者 │ │ └── consumer/ # 消费者 ├── activemq-demo/ # ActiveMQ示例 │ ├── src/main/java/com/mqstudy/activemq/ │ │ ├── producer/ # 生产者 │ │ └── consumer/ # 消费者 └── pulsar-demo/ # Pulsar示例 ├── src/main/java/com/mqstudy/pulsar/ │ ├── producer/ # 生产者 │ └── consumer/ # 消费者 ``` ## 支持的MQ中间件 ### 1. RabbitMQ - **特点**: 基于AMQP协议,稳定可靠 - **端口**: 8081 - **功能**: - 直连、扇出、主题交换机 - 延迟消息和死信队列 - 消息优先级 - 批量消息发送 ### 2. Apache Kafka - **特点**: 高吞吐量,低延迟,适合流式数据处理 - **端口**: 8082 - **功能**: - 多分区主题 - 异步消息发送 - 高吞吐量测试 - 分区消息发送 ### 3. Apache RocketMQ - **特点**: 阿里巴巴开源,支持分布式事务 - **端口**: 8083 - **功能**: - 同步/异步/单向消息 - 延迟消息和顺序消息 - 事务消息 - 批量消息发送 ### 4. Apache ActiveMQ - **特点**: 老牌消息队列,支持多种协议 - **端口**: 8084 - **功能**: - JMS消息发送 - 点对点和发布订阅模式 - 消息持久化 ### 5. Apache Pulsar - **特点**: 新兴消息系统,支持多租户和分层存储 - **端口**: 8085 - **功能**: - 多租户支持 - 分层存储 - 流处理 ## 快速开始 ### 环境要求 - Docker & Docker Compose - 至少4GB可用内存 ### 一键启动所有服务 ```bash # Linux/Mac ./start.sh # Windows start.bat ``` 这个命令会自动: 1. 启动所有MQ服务(RabbitMQ、Kafka、RocketMQ、ActiveMQ、Pulsar) 2. 构建并启动所有Spring Boot应用 3. 配置网络连接 4. 显示访问地址和测试命令 ### 手动启动(可选) 如果只想启动MQ服务而不启动Spring Boot应用: ```bash docker-compose up -d rabbitmq kafka rocketmq-namesrv rocketmq-broker activemq pulsar ``` ### 访问地址 - **MQ管理界面**: - RabbitMQ: http://localhost:15672 (admin/admin123) - ActiveMQ: http://localhost:8161 (admin/admin123) - Pulsar: http://localhost:8080 - **Spring Boot应用**: - RabbitMQ应用: http://localhost:8081 - Kafka应用: http://localhost:8082 - RocketMQ应用: http://localhost:8083 - ActiveMQ应用: http://localhost:8084 - Pulsar应用: http://localhost:8085 ### 停止服务 ```bash # Linux/Mac ./stop.sh # Windows stop.bat ``` ### 传统启动方式(可选) 如果需要本地开发环境: ```bash # 编译整个项目 mvn clean compile # 启动RabbitMQ示例 cd rabbitmq-demo && mvn spring-boot:run # 启动Kafka示例 cd kafka-demo && mvn spring-boot:run # 启动RocketMQ示例 cd rocketmq-demo && mvn spring-boot:run # 启动ActiveMQ示例 cd activemq-demo && mvn spring-boot:run # 启动Pulsar示例 cd pulsar-demo && mvn spring-boot:run ``` ## API接口 ### RabbitMQ API (端口: 8081) - `POST /rabbitmq/send/direct` - 发送直连消息 - `POST /rabbitmq/send/fanout` - 发送扇出消息 - `POST /rabbitmq/send/topic1` - 发送主题消息1 - `POST /rabbitmq/send/topic2` - 发送主题消息2 - `POST /rabbitmq/send/delay` - 发送延迟消息 - `POST /rabbitmq/send/priority` - 发送优先级消息 - `POST /rabbitmq/send/batch` - 发送批量消息 - `GET /rabbitmq/health` - 健康检查 ### Kafka API (端口: 8082) - `POST /kafka/send/test` - 发送测试消息 - `POST /kafka/send/order` - 发送订单消息 - `POST /kafka/send/user` - 发送用户消息 - `POST /kafka/send/log` - 发送日志消息 - `POST /kafka/send/stream` - 发送流式消息 - `POST /kafka/send/batch` - 发送批量消息 - `GET /kafka/health` - 健康检查 ### RocketMQ API (端口: 8083) - `POST /rocketmq/send/sync` - 发送同步消息 - `POST /rocketmq/send/async` - 发送异步消息 - `POST /rocketmq/send/oneway` - 发送单向消息 - `POST /rocketmq/send/delay` - 发送延迟消息 - `POST /rocketmq/send/ordered` - 发送顺序消息 - `POST /rocketmq/send/transaction` - 发送事务消息 - `GET /rocketmq/health` - 健康检查 ### ActiveMQ API (端口: 8084) - `POST /activemq/send/queue` - 发送队列消息 - `POST /activemq/send/topic` - 发送主题消息 - `POST /activemq/send/durable` - 发送持久化消息 - `GET /activemq/health` - 健康检查 ### Pulsar API (端口: 8085) - `POST /pulsar/send/producer` - 发送消息 - `POST /pulsar/send/async` - 异步发送消息 - `POST /pulsar/send/batch` - 批量发送消息 - `GET /pulsar/health` - 健康检查 ## 示例请求 ### RabbitMQ - 发送直连消息 ```bash curl -X POST http://localhost:8081/rabbitmq/send/direct \ -H "Content-Type: application/json" \ -d '{"content": "Hello RabbitMQ!"}' ``` ### Kafka - 发送测试消息 ```bash curl -X POST http://localhost:8082/kafka/send/test \ -H "Content-Type: application/json" \ -d '{"content": "Hello Kafka!"}' ``` ### RocketMQ - 发送同步消息 ```bash curl -X POST http://localhost:8083/rocketmq/send/sync \ -H "Content-Type: application/json" \ -d '{"content": "Hello RocketMQ!"}' ``` ## 学习要点 ### 1. 消息模式对比 - **点对点模式**: 一个消息只能被一个消费者消费 - **发布订阅模式**: 一个消息可以被多个消费者消费 - **主题模式**: 基于路由键的消息路由 ### 2. 消息可靠性 - **消息确认**: 生产者确认、消费者确认 - **消息持久化**: 磁盘存储、内存存储 - **消息重试**: 失败重试机制 - **死信队列**: 处理失败消息 ### 3. 性能优化 - **批量发送**: 提高吞吐量 - **异步发送**: 减少延迟 - **分区策略**: 提高并行度 - **连接池**: 复用连接 ### 4. 监控和管理 - **消息轨迹**: 追踪消息流转 - **性能指标**: 吞吐量、延迟、错误率 - **集群管理**: 节点监控、故障转移 ## 注意事项 1. 确保各MQ服务已正确启动 2. 检查端口配置是否正确 3. 注意消息序列化和反序列化 4. 合理配置消费者并发数 5. 监控消息积压情况 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目。 ## 许可证 MIT License