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

这篇具有很好参考价值的文章主要介绍了基于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对象>

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

二、管理集合

1.交换机

  • 往交换机集合中添加 Exchange 对象
  • 从交换机集合中删除Exchange 对象
  • 根据exchangeName查找Exchange对象
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

2.队列

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

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

3.绑定

  • 往绑定集合中添加新绑定
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 从绑定集合中删除绑定
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 根据 exchangeName 和 queueName查找唯一的Binding 对象
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 根据exchangeName查找该交换机的所有绑定关系
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

4.消息

  • 往消息集合中添加新消息
  • 从消息集合中删除消息
  • 根据messageId查找Message对象
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

5.队列上的消息

  • 往队列消息集合中发送消息
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 从队列集合中取出消息
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 统计队列上的消息总数
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

6.待确认消息

  • 往待确认集合中添加消息
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 从待确认集合中删除消息
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

  • 根据messageId在待确认集合中查找Message对象
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq文章来源地址https://www.toymoban.com/news/detail-693900.html

7.恢复数据

  • 将所有集合(除了待确认消息结合)清除
  • 从硬盘上加载交换机、队列、绑定、消息到内存
    基于RabbitMQ的模拟消息队列之四——内存管理,rabbitmq

到了这里,关于基于RabbitMQ的模拟消息队列之四——内存管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于RabbitMQ的模拟消息队列之二---创建项目及核心类

    创建一个SpringBoot项目,环境:JDK8,添加依赖:Spring Web、MyBatis FrameWork(最主要) 2.核心类 在mqserver包中添加一个包,名字为core,表示核心类。 Exchange ExchangeType MSGQueue (为了区分Queue) Binding Message BasicProperties

    2024年02月11日
    浏览(44)
  • 模拟实现消息队列(以 RabbitMQ 为蓝本)

    核心概念1 生产者(Producer):生产者负责生成数据并将其放入缓冲区(队列)中。生产者可以是一个线程或多个线程,它们可以并行地生成数据。当缓冲区(队列)已满时,生产者需要等待,直到有空间可用。 消费者(Consumer):消费者负责从缓冲区(队列)中取出数据并进行处

    2024年02月13日
    浏览(66)
  • 手写消息队列(基于RabbitMQ)

    提到消息队列是否唤醒了你脑海深处的记忆?回看前面的这篇文章:《Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)》,其中我们在介绍阻塞队列时说过,阻塞队列最大的用途就是实现 生产者消费者模型 。 我们知道对于生产者消费者模型来说,它具有两个十分

    2024年02月05日
    浏览(42)
  • SpringCloud-实现基于RabbitMQ的消息队列

    消息队列是现代分布式系统中常用的通信机制,用于在不同的服务之间传递消息。在Spring Cloud框架中,我们可以利用RabbitMQ实现强大而可靠的消息队列系统。本篇博客将详细介绍如何在Spring Cloud项目中集成RabbitMQ,并创建一个简单的消息队列。 这里是一个简单的RabbitMQ消息队列

    2024年03月11日
    浏览(53)
  • 根据源码,模拟实现 RabbitMQ - 内存数据管理(4)

    目录 一、内存数据管理 1.1、需求分析 1.2、实现 MemoryDataCenter 类 1.2.1、ConcurrentHashMap 数据管理 1.2.2、封装交换机操作 1.2.3、封装队列操作 1.2.4、封装绑定操作 1.2.5、封装消息操作 1.2.6、封装未确认消息操作 1.2.7、封装恢复数据操作 当前已经使用 数据库 管理了 交换机、绑定

    2024年02月11日
    浏览(38)
  • 模拟实现消息队列项目(系列4) -- 服务器模块(内存管理)

    目录 前言 1. 创建MemoryDataCenter 2. 封装Exchange 和 Queue方法 3. 封装Binding操作 4. 封装Message操作 4.1 封装消息中心集合messageMap 4.2 封装消息与队列的关系集合queueMessageMap的操作 5. 封装未确认消息集合waitMessage的操作 6. 从硬盘中恢复数据到内存中 7. MemoryDataCenter单元测试 结语    

    2024年02月14日
    浏览(42)
  • RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型

    目录 一、SpringAMQP 1.1、概念 1.2、前置知识(实现案例前必看!) 1.2.1、创建队列 1.2.2、创建交换机 1.2.3、创建绑定 1.2.4、@RabbitListener 注解 a)情况一:queue 存在 b)情况二:queue 不存在  1.2.5、为什么更建议使用 @Bean 注解创建,而不是 @RabbitListener 注解创建? 1.3、案例实现

    2024年04月12日
    浏览(46)
  • rabbitmq-常见七种消息队列-控制台界面管理-python-实现简单访问

    1.1.生产者和消费者 生产者(Producer) 消息的创建者。 负责创建和推送数据到消息服务器。 消费者(Consumer) 消息的接收方。 负责接收消息和处理数据。 1.2.消息队列(Queue) 消息队列是RabbitMQ的内部对象,用于存储生产者的消息直到发送给消费者,它是消费者接收消息的地方。 消息

    2024年02月03日
    浏览(64)
  • 基于golang多消息队列中间件的封装nsq,rabbitmq,kafka

    场景 在创建个人的公共方法库中有这样一个需求,就是不同的项目会用到不同的消息队列中间件,我的思路把所有的消息队列中间件进行封装一个消息队列接口(MQer)有两个方法一个生产一个消费,那么在实例化对象的时候根据配置文件指定当前项目使用的那个消息队列中

    2024年02月14日
    浏览(58)
  • RabbitMQ实现延迟消息,RabbitMQ使用死信队列实现延迟消息,RabbitMQ延时队列插件

    假设有一个业务场景:超过30分钟未付款的订单自动关闭,这个功能应该怎么实现? RabbitMQ使用死信队列,可以实现消息的延迟接收。 队列有一个消息过期属性。就像丰巢超过24小时就收费一样,通过设置这个属性,超过了指定事件的消息将会被丢弃。 这个属性交:x-message

    2024年02月13日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包