项目实战 — 消息队列(5){统一硬盘操作}

前面已经使用数据库管理了交换机、绑定、队列,然后又使用了数据文件管理了消息。

那么,这里就创建一个类,讲之前的两个部分整合起来,对上层提供统一的一套接口,表示硬盘上存储的所有的类的信息。

java 复制代码
/*
* 用这个类来管理所有硬盘上的数据
* 1.数据库:交换机、绑定、队列
* 2.数据文件:消息
* */
public class DiskDataCenter {
//    用这个示例来管理数据库中的数据
    private DataBaseManger dataBaseManger = new DataBaseManger();
//    用这个表示数据文件中的数据
    private MessageFileManger messageFileManger = new MessageFileManger();

    public void init(){
//        针对上述的两个示例进行初始化
        dataBaseManger.init();
        messageFileManger.init();
    }


    /*封装数据库操作*/
//    封装交换机操作
    public void insertExchange(Exchange exchange){
        dataBaseManger.insertExchange(exchange);
    }

    public void deleteExchange(String exchangeName){
        dataBaseManger.deleteExchange(exchangeName);
    }

    public List<Exchange> selectAllExchanges(){
        return dataBaseManger.selectAllExchanges();
    }

//    封装队列操作
    public void insertQueue(MSGQueue queue) throws IOException {
        dataBaseManger.insertQueue(queue);
//        创建队列的同时,不仅需要把队列对象写道数据库中,还需要创建出对应的目录和文件
        messageFileManger.createQueueFiles(queue.getName());
    }

    public void deleteQueue(String queueName) throws IOException {
        dataBaseManger.deleteQueue(queueName);
//        删除队列的同时,不仅需要把队列对象从数据库中删除,还需要删除出对应的目录和文件
        messageFileManger.destroyQueueFiles(queueName);
    }

    public List<MSGQueue> selectAllQueues(){
        return dataBaseManger.selectAllQueues();
    }

//    封装绑定操作
    public void insertBinding(Binding binding){
        dataBaseManger.insertBinding(binding);
    }

    public void deleteBinding(Binding binding){
        dataBaseManger.deleteBinding(binding);
    }

    public List<Binding> selectAllBindings(){
        return dataBaseManger.selectAllBindings();
    }


    /*封装消息操作*/
//    发送操作
    public void sendMessage(MSGQueue queue, Message message) throws IOException, MqException {
        messageFileManger.sendMessage(queue,message);
    }

//    删除操作
    public void deleteMessage(MSGQueue queue,Message message) throws IOException, ClassNotFoundException, MqException {
        messageFileManger.deleteMessage(queue, message);
        if (messageFileManger.checkGC(queue.getName())){
            messageFileManger.gc(queue);
        }
    }

//    将信息加载到内存
    public LinkedList<Message> loadAllMessageFromQueue(String queueName) throws IOException, MqException, ClassNotFoundException {
        return messageFileManger.loadAllMessageFromQueue(queueName);
    }

}

创建了这个类,我们就不用去直接调用DataBaseManager和MessageFileManager里面得方法了。

相关推荐
SL_staff6 分钟前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff1 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko71 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.2 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff2 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
代码山河3 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
Escalating_xu4 小时前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
程序猿乐锅5 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Java后端的Ai之路5 小时前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData6 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设