【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 分钟前
idea使用AI插件(CodeGeeX)
java·ide·ai·intellij-idea·插件·codegeex
东北小狐狸-Hellxz3 分钟前
后端生成的URL中含base64参数值,经tomcat重定向后偶发前端无法解密报错
java·前端·tomcat
小鸡吃米…10 分钟前
Python - 多重继承
开发语言·python
悟能不能悟10 分钟前
java list怎么进行group
java·python·list
专注于大数据技术栈14 分钟前
java学习--Math 类常用方法
java·学习
Lisonseekpan20 分钟前
UUID vs 自增ID做主键,哪个好?
java·数据库·后端·mysql
利刃大大25 分钟前
【SpringBoot】配置文件 && 日志输出 && lombok
java·spring boot·后端
catchadmin25 分钟前
使用 PHP 和 WebSocket 构建实时聊天应用 完整指南
开发语言·websocket·php
C+++Python31 分钟前
如何选择合适的锁机制来提高 Java 程序的性能?
java·前端·python
long31638 分钟前
类与对象 | 低级别设计 (LLD)
java·spring boot·学习·程序人生·spring·设计模式·学习方法