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

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

相关推荐
咖啡八杯1 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育1 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵2 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code4 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121314 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城6 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源