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

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

相关推荐
AI 嗯啦6 小时前
Python 爬虫案例:爬取豆瓣电影 Top250 数据
开发语言·爬虫·python
1candobetter6 小时前
软考中级习题与解答——第二章_程序语言与语言处理程序(1)
开发语言
~kiss~6 小时前
MCP Go SDK学习一
开发语言·后端·golang
我是一只菜菜6 小时前
Pointer--Learing MOOC-C语言第九周指针
c语言·开发语言
云天徽上7 小时前
【数据可视化-104】安徽省2025年上半年GDP数据可视化分析:用Python和Pyecharts打造炫酷大屏
开发语言·python·信息可视化·数据分析·数据可视化
dlraba8027 小时前
用 MATLAB 实现遗传算法求解一元函数极值:从代码到实践
开发语言·matlab
程序员如山石7 小时前
字符编码的本质
开发语言
COTAS7 小时前
K8S 知识框架和命令操作
java·容器·kubernetes
duration~7 小时前
SpringAI模型评估
java·spring boot·spring·ai编程