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

目录

[一. 封装接口](#一. 封装接口)

[1.1 初始化](#1.1 初始化)

[1.2 封装交换机](#1.2 封装交换机)

[1.3 封装消息队列](#1.3 封装消息队列)

[1.4 封装绑定关系](#1.4 封装绑定关系)

[1.5 封装消息](#1.5 封装消息)


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

一. 封装接口

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

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

1.1 初始化

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

java 复制代码
    public void init(){
        dataBaseMange.init();
        messageFileManager.init();
    }

1.2 封装交换机

增加交换机

java 复制代码
    public void insertExchange(Exchange exchange){
        dataBaseMange.insertExchange(exchange);
    }

删除交换机

java 复制代码
    public void deleteExchange(String exchangeName){
        dataBaseMange.deleteExchange(exchangeName);
    }

查询所有的交换机

java 复制代码
    public List<Exchange> selectAllExchange(){
        return dataBaseMange.selectAllExchange();
    }

1.3 封装消息队列

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

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

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

java 复制代码
    public void deleteMSGQueue(String msgQueueName) throws IOException {
        dataBaseMange.deleteMSGQueue(msgQueueName);
        messageFileManager.destroyFile(msgQueueName);
    }

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

java 复制代码
    public List<MSGQueue> selectAllMSGQueue(){
        return dataBaseMange.selectAllMSGQueue();
    }

1.4 封装绑定关系

增加绑定关系

java 复制代码
    public void insertBinding(Binding binding){
        dataBaseMange.insertBinding(binding);
    }

删除绑定关系

java 复制代码
    public void deleteBinding(Binding binding){
        dataBaseMange.deleteBinding(binding);
    }

查询所有的绑定关系

java 复制代码
    public List<Binding> selectAllBinding(){
        return dataBaseMange.selectAllBinding();
    }

1.5 封装消息

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

发送消息到队列

java 复制代码
    public void sendMessage(MSGQueue msgQueue, Message message) throws IOException, MqException {
        messageFileManager.sendMessage(msgQueue, message);
    }

从队列中删除消息

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

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

读取队列中所有消息

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

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

相关推荐
无所谓^_^4 分钟前
个人健康管理系统 | Springboot3 | Vue3
java·vue·毕业设计·springboot·课程设计·毕设·前后端分离
杨凯凡11 分钟前
Spring Boot 的 @Transactional 为什么会失效?从代理、自调用到异常回滚的排查实战
java·spring boot·spring·事务·后端开发
熊猫钓鱼>_>22 分钟前
三方库 NDK 原生模块跨平台适配与调试【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙心迹
曼岛_27 分钟前
[图解密码学]第5章 对称加密基础
java·数据库·密码学
HANDY0920028 分钟前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
1024奇点10 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch10 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
天河归来11 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL11 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing0312 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2