基于RabbitMQ的模拟消息队列之四——内存管理

文章目录

一、设计数据结构

针对交换机、队列、绑定、消息、待确认消息设计数据结构。

  • 交换机集合 exchangeMap

    数据结构:ConcurrentHashMap

    key:交换机name value:交换机对象

  • 队列集合 queueMap

    数据结构: ConcurrentHashMap

    key:队列name value:队列对象

  • 绑定集合 bindingsMap

    数据结构: ConcurrentHashMap 嵌套 ConcurrentHashMap

    key:交换机名字 value: ConcurrentHashMap <key:队列名字 value:绑定对象>

  • 消息集合 messageMap

    数据结构: ConcurrentHashMap

    key:messageId value:message对象

  • 队列消息集合

    数据结构 : ConcurrentHashMap 嵌套 LinkedList

    key:队列name value:LinkedList < Message >

  • 待确认消息集合

    数据结构: ConcurrentHashMap 嵌套 ConcurrentHashMap

    key:队列name value: ConcurrentHashMap < key:messageId value:Message对象>

二、管理集合

1.交换机

  • 往交换机集合中添加 Exchange 对象
  • 从交换机集合中删除Exchange 对象
  • 根据exchangeName查找Exchange对象

2.队列

  • 往队列集合中添加MSGQueue对象
  • 从队列集合中删除MSGQueue对象
  • 根据queueName查找MSGQueue对象

3.绑定

  • 往绑定集合中添加新绑定

  • 从绑定集合中删除绑定

  • 根据 exchangeName 和 queueName查找唯一的Binding 对象

  • 根据exchangeName查找该交换机的所有绑定关系

4.消息

  • 往消息集合中添加新消息
  • 从消息集合中删除消息
  • 根据messageId查找Message对象

5.队列上的消息

  • 往队列消息集合中发送消息

  • 从队列集合中取出消息

  • 统计队列上的消息总数

6.待确认消息

  • 往待确认集合中添加消息

  • 从待确认集合中删除消息

  • 根据messageId在待确认集合中查找Message对象

7.恢复数据

  • 将所有集合(除了待确认消息结合)清除
  • 从硬盘上加载交换机、队列、绑定、消息到内存
相关推荐
eSsO KERF32 分钟前
RabbitMQ之交换机
分布式·rabbitmq·ruby
Albert Edison1 小时前
【RabbitMQ】Topics 通配符模式(使用案例)
分布式·rabbitmq
Ssan PRIN16 小时前
深度掌握 RabbitMQ 消息确认(ACK)机制,确保消息万无一失
分布式·rabbitmq
jessecyj21 小时前
【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
windows·分布式·rabbitmq
MoFe12 天前
【.net core】【RabbitMq】rabbitmq在.net core中的简单使用
分布式·rabbitmq·.netcore
何中应2 天前
在windows本地部署RabbitMQ
分布式·消息队列·rabbitmq
低客的黑调2 天前
RabbitMQ-从入门到生产落地
分布式·rabbitmq
Albert Edison3 天前
【RabbitMQ】发布 / 订阅模式(使用案例)
分布式·rabbitmq
ldj20204 天前
从 API 调用到事件驱动:用 RabbitMQ /RocketMQ重构微服务通信架构
架构·rabbitmq
喝汽水的猫^4 天前
Spring Boot + RabbitMQ 实战:消息可靠投递+防重复消费(可直接落地)
spring boot·rabbitmq·java-rabbitmq