【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());
    }

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

相关推荐
上海合宙LuatOS16 小时前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程
lly20240616 小时前
《堆的 shift down》
开发语言
汤姆yu16 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
TT哇16 小时前
【实习】银行经理端线下领取扫码功能实现方案
java
野犬寒鸦16 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
黎雁·泠崖17 小时前
【魔法森林冒险】2/14 抽象层设计:Figure/Person类(所有角色的基石)
java·开发语言
季明洵17 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
墨雪不会编程17 小时前
C++之【深入理解Vector】三部曲最终章
开发语言·c++
怒放吧德德17 小时前
后端 Mock 实战:Spring Boot 3 实现入站 & 出站接口模拟
java·后端·设计
浅念-17 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法