【消息队列开发】 实现DiskDataCenter类——管理所有硬盘上的数据

简介: 【消息队列开发】 实现DiskDataCenter类——管理所有硬盘上的数据

🍃前言

本次开发目标:实现 DiskDataCenter 类

  • 使用这个类来管理所有硬盘上的数据.
  1. 数据库: 交换机, 绑定, 队列
  2. 数据文件: 消息
  • 上层逻辑如果需要操作硬盘, 统一都通过这个类来使用. (上层代码不关心当前数据是存储在数据库还是文件中的)

🎄实现思路

实现步骤大致可分为五步

  1. 创建实例与初始化
  2. 封装交换机操作
  3. 封装队列操作
  4. 封装绑定操作
  5. 封装消息操作

🚩创建实例与初始化

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

相关文章
|
25天前
|
消息中间件 Java 数据库
【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
|
25天前
|
消息中间件 存储 安全
【消息队列开发】 实现ConsumerManager类——消费消息的核心逻辑
【消息队列开发】 实现ConsumerManager类——消费消息的核心逻辑
|
25天前
|
消息中间件 网络协议 Java
【消息队列开发】 实现BrokerServer类——本体服务器
【消息队列开发】 实现BrokerServer类——本体服务器
|
5天前
|
消息中间件 Java Spring
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
13 0
|
19天前
|
消息中间件 存储 RocketMQ
消息队列 MQ产品使用合集之如何防止丢数据
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
25天前
|
消息中间件 API
【消息队列开发】 实现 MqClientTests 类——测试客户端
【消息队列开发】 实现 MqClientTests 类——测试客户端
|
25天前
|
消息中间件 存储 网络协议
【消息队列开发】实现客户端
【消息队列开发】实现客户端
|
25天前
|
消息中间件 网络协议
【消息队列开发】 设计网络通信协议
【消息队列开发】 设计网络通信协议
|
1月前
|
消息中间件 存储 监控
RabbitMQ:分布式系统中的高效消息队列
RabbitMQ:分布式系统中的高效消息队列
|
1月前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
75 2