🍃前言
本次开发目标:实现 DiskDataCenter 类
- 使用这个类来管理所有硬盘上的数据.
- 数据库: 交换机, 绑定, 队列
- 数据文件: 消息
- 上层逻辑如果需要操作硬盘, 统一都通过这个类来使用. (上层代码不关心当前数据是存储在数据库还是文件中的)
🎄实现思路
实现步骤大致可分为五步
🚩创建实例与初始化
我们对前面我们所封装的两个类 :DataBaseManager 和 MessageFileManager 类
进行实例化,并对这两个实例提供一个初始化的方法
这里需要注意的是
- 我们再MessageFileManager类中并没有提供初始化方法,所以我们这里虽然调用,但是该方法为空,可以方便后续拓展
代码实现如下:
// 这个实例用来管理数据库中的数据 private DataBaseManager dataBaseManager = new DataBaseManager(); // 这个实例用来管理数据文件中的数据 private MessageFileManager messageFileManager = new MessageFileManager(); public void init() { // 针对上述两个实例进行初始化. dataBaseManager.init(); // 当前 messageFileManager.init 是空的方法, 只是先列在这里, 一旦后续需要扩展, 就在这里进行初始化即可. messageFileManager.init(); }
🚩封装交换机操作
创建三个方法,作用分别为
- 添加交换机
- 删除交换机
- 查询交换机
分别调用 DataBaseManager 类的相应方法即可
代码实现如下:
// 封装交换机操作 public void insertExchange(Exchange exchange) { dataBaseManager.insertExchange(exchange); } public void deleteExchange(String exchangeName) { dataBaseManager.deleteExchange(exchangeName); } public List<Exchange> selectAllExchanges() { return dataBaseManager.selectAllExchanges(); }
🚩封装队列操作
创建三个方法,作用分别为
- 添加队列
- 删除队列
- 查询队列
添加队列时,不仅仅是把队列对象写到数据库中, 还需要创建出对应的目录和文件
删除队列的同时, 不仅仅是把队列从数据库中删除, 还需要删除对应的目录和文件
查询队列时,直接返回即可
代码实现如下:
// 封装队列操作 public void insertQueue(MSGQueue queue) throws IOException { dataBaseManager.insertQueue(queue); // 创建队列的同时, 不仅仅是把队列对象写到数据库中, 还需要创建出对应的目录和文件 messageFileManager.createQueueFiles(queue.getName()); } public void deleteQueue(String queueName) throws IOException { dataBaseManager.deleteQueue(queueName); // 删除队列的同时, 不仅仅是把队列从数据库中删除, 还需要删除对应的目录和文件 messageFileManager.destroyQueueFiles(queueName); } public List<MSGQueue> selectAllQueues() { return dataBaseManager.selectAllQueues(); }
🚩封装绑定操作
创建三个方法,作用分别为
- 添加绑定
- 删除绑定
- 查询绑定
直接调用 DataBaseManager 类的相应的方法即可
// 封装绑定操作 public void insertBinding(Binding binding) { dataBaseManager.insertBinding(binding); } public void deleteBinding(Binding binding) { dataBaseManager.deleteBinding(binding); } public List<Binding> selectAllBindings() { return dataBaseManager.selectAllBindings(); }
🚩封装消息操作
创建三个方法,作用分别为
- 添加消息
- 删除消息
- 查询消息
关于添加消息,只需要调用 MessageFileManager 类将消息写入文件的方法即可
删除消息是,除了调用MessageFileManager 类删除消息的方法,我们还需要 调用是否进行 GC 与 进行GC的方法
查询消息时,直接调用返回即可
// 封装消息操作 public void sendMessage(MSGQueue queue, Message message) throws IOException, MqException { messageFileManager.sendMessage(queue, message); } public void deleteMessage(MSGQueue queue, Message message) throws IOException, ClassNotFoundException, MqException { messageFileManager.deleteMessage(queue, message); if (messageFileManager.checkGC(queue.getName())) { messageFileManager.gc(queue); } } public LinkedList<Message> loadAllMessageFromQueue(String queueName) throws IOException, MqException, ClassNotFoundException { return messageFileManager.loadAllMessageFromQueue(queueName); }
⭕总结
关于《【消息队列开发】 实现DiskDataCenter类——管理所有硬盘上的数据》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下