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

相关文章
|
4天前
|
消息中间件 测试技术
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
轻量消息队列(原MNS)以其简单队列模型、轻量化协议及按量后付费模式,成为阿里云产品间消息传输首选。本文通过创建主题、订阅、配置告警集成等步骤,展示了该产品在实际应用中的部分功能,确保消息的可靠传输。
17 2
|
4月前
|
消息中间件 Java 测试技术
消息队列 MQ使用问题之数据流出规则是否支持平台的云RabbitMQ
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 网络协议 Java
【消息队列开发】 实现BrokerServer类——本体服务器
【消息队列开发】 实现BrokerServer类——本体服务器
|
3月前
|
消息中间件 存储 监控
消息队列在分布式系统中如何保证数据的一致性和顺序?
消息队列在分布式系统中如何保证数据的一致性和顺序?
|
4月前
|
消息中间件 监控 物联网
消息队列 MQ使用问题之如何获取和处理消息堆积数据
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java 开发工具
消息队列 MQ产品使用合集之topic相同,但是tag不同,这个类不能放入map中,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java Spring
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
50 0
|
5月前
|
消息中间件 存储 RocketMQ
消息队列 MQ产品使用合集之如何防止丢数据
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
5月前
|
消息中间件 API
【消息队列开发】 实现 MqClientTests 类——测试客户端
【消息队列开发】 实现 MqClientTests 类——测试客户端
|
5月前
|
消息中间件 存储 网络协议
【消息队列开发】实现客户端
【消息队列开发】实现客户端