当前位置: 首页 > ai >正文

【RelayMQ】基于 Java 实现轻量级消息队列(五)

目录

一. 封装接口

1.1 初始化

1.2 封装交换机

1.3 封装消息队列

1.4 封装绑定关系

1.5 封装消息


封装所有硬件上面的操作,数据库和文件操作

一. 封装接口

封装这两个类中提供的方法

    private DataBaseMange dataBaseMange = new DataBaseMange();private MessageFileManager messageFileManager = new MessageFileManager();
  • DataBaseMange 类:负责对交换机,队列,绑定进行管理
  • MessageFileManager 类:负责对消息进行管理

1.1 初始化

初始化数据库,完成建表操作和放入一个默认交换机

    public void init(){dataBaseMange.init();messageFileManager.init();}

1.2 封装交换机

增加交换机

    public void insertExchange(Exchange exchange){dataBaseMange.insertExchange(exchange);}

删除交换机

    public void deleteExchange(String exchangeName){dataBaseMange.deleteExchange(exchangeName);}

查询所有的交换机

    public List<Exchange> selectAllExchange(){return dataBaseMange.selectAllExchange();}

1.3 封装消息队列

db中增加消息队列并创建出数据文件和统计文件

    public void insertMSGQueue(MSGQueue msgQueue) throws IOException {dataBaseMange.insertMSGQueue(msgQueue);//还需要创建出对应的文件messageFileManager.createQueueFile(msgQueue.getName());}

db中删除消息队列并清除掉相关的数据文件和统计文件

    public void deleteMSGQueue(String msgQueueName) throws IOException {dataBaseMange.deleteMSGQueue(msgQueueName);messageFileManager.destroyFile(msgQueueName);}

从db中查询出所有的消息队列

    public List<MSGQueue> selectAllMSGQueue(){return dataBaseMange.selectAllMSGQueue();}

1.4 封装绑定关系

增加绑定关系

    public void insertBinding(Binding binding){dataBaseMange.insertBinding(binding);}

删除绑定关系

    public void deleteBinding(Binding binding){dataBaseMange.deleteBinding(binding);}

查询所有的绑定关系

    public List<Binding> selectAllBinding(){return dataBaseMange.selectAllBinding();}

1.5 封装消息

针对消息队列中的消息做出处理

发送消息到队列

    public void sendMessage(MSGQueue msgQueue, Message message) throws IOException, MqException {messageFileManager.sendMessage(msgQueue, message);}

从队列中删除消息

这里在每次删除消息之后,都会进行一次gc判断,如果gc满足,则会进行一次垃圾回收

public void deleteMessage(MSGQueue msgQueue,Message message) throws IOException, ClassNotFoundException, MqException {messageFileManager.deleteMessage(msgQueue, message);if(messageFileManager.checkGC(msgQueue.getName())){messageFileManager.gc(msgQueue);}}

读取队列中所有消息

    public LinkedList<Message> selectAllMessage(MSGQueue msgQueue) throws IOException, MqException, ClassNotFoundException {return messageFileManager.loadAllMessageFromQueue(msgQueue.getName());}

这里就是使用一个类,将两个部分整合到一起,对上层提供统一的调用接口

http://www.xdnf.cn/news/19454.html

相关文章:

  • 2025 最新Vue前端面试题目 (9月最新)
  • AI 重构医疗诊断:影像识别准确率突破 98%,基层医院如何借技术缩小诊疗差距?
  • 设备服务管理上报方案
  • 两轮车车机 OS 演进路线深度解析
  • libmodbus源码分析
  • 【前端】《手把手带你入门前端》前端的一整套从开发到打包流程, 这篇文章都会教会你;什么是vue,Ajax,Nginx,前端三大件?
  • 差角函数差角矩阵位置编码
  • 无需服务器也能建网站:Docsify+cpolar让技术文档分享像写笔记一样简单
  • 手机版碰一碰发视频源码搭建,技术实现与实操指南
  • 鸿蒙开发进阶(HarmonyOS)
  • Unity中多线程与高并发下的单例模式
  • MobaXterm介绍
  • Git将多笔patch合并成一笔
  • 苹果 Safari 地址栏可能被超大光标视觉欺骗
  • HarvardX TinyML小笔记2(番外3:数据工程)(TODO)
  • 杰理ac791无法控制io脚原因
  • Coze源码分析-工作空间-项目开发-后端源码
  • 传输层TCP 与 安全层SSL/TLS
  • shell之扩展
  • 接口自动化测试之设置断言思路
  • 什么是MIPS架构?RISC-V架构?有什么区别?【超详细初学者教程】
  • 深入Linux内核:IPC资源管理揭秘
  • 从 “对话” 到 “共创”:生成式 AI 如何重塑内容创作全流程,普通人也能掌握的高效工具指南
  • MongoDB 备份与恢复:mongodump 和 mongorestore 实战
  • Qt 的信号signal的参数是否会在内部被拷贝?
  • duilib中CTextUI控件使用技巧与问题总结(CTextUI控件自适应文字宽度特性)
  • 如何正确使用ChatGPT做数学建模比赛——数学建模AI使用技巧
  • 【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法
  • 开发使用mybatis是用混合模式还是全注解模式
  • 陕西凉拌西瓜皮,变废为宝的陕味美味~