# CarrotMQ消息队列 **Repository Path**: hxh2001/carrot-message-queue ## Basic Information - **Project Name**: CarrotMQ消息队列 - **Description**: 从0到1实现一个消息队列。模拟实现一个类似 RabbitMQ 这样的消息队列。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-27 - **Last Updated**: 2023-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SpringBoot, MyBatis, Sqlite, Socket ## README # CarrotMQ消息队列 #### 介绍 从0到1实现一个消息队列。模拟实现一个类似 RabbitMQ 这样的消息队列。 #### 核心API 消息队列服务器(Broker Server)的核心 API 如下: 1. 创建队列(queueDeclare) 2. 销毁队列(queueDelete) 3. 创建交换机(exchangeDeclare) 4. 销毁交换机(exchangeDelete) 5. 创建绑定(queueBind) 6. 解除绑定(queueUnbind) 7. 发布消息(basicPublish) 8. 订阅消息(basicConsume) 9. 确认消息(basicAck) #### 实现的交换机类型 1. Direct 直接交换机 生产者发送消息指定一个“目标队列”的名字,交换机收到之后则查看绑定的队列中有无匹配的队列,如果有则转发消息,如果无则丢弃消息。 2. Fanout 扇出交换机 将收到的消息分别发送到每一个绑定的队列中。 3. Topic 主题交换机 如果当前 routingKey 和 bindingKey 匹配,则将消息转发到对应的队列中。其中: - bindingKey:把队列和交换机绑定的时候,指定一个单词(暗号) - routingKey:生产者发送消息时也指定一个单词。 #### 持久化说明 对于虚拟主机、交换机、队列、绑定和消息,都需要使用 BrokerServer 组织管理,都需要存储和管理起来。为了 MQ 能高效的转发处理数据,则使用内存来组织上述数据。而为了防止内存中的数据随着进程的重启/主机重启而丢失,也需要在硬盘上存储一份。