🍃前言
本次开发目标:实现 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类——管理所有硬盘上的数据》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下