【消息队列开发】 虚拟主机设计——操作队列

简介: 【消息队列开发】 虚拟主机设计——操作队列

🍃前言

本次开发任务

  • 实现对队列的操作
  • 主要实现对队列的增加与删除

🎄添加队列

添加队列操作我们可以分为以下五步:

  1. 更改队列名
  2. 判断队列是否存在
  3. 创建队列对象
  4. 将该对象写入硬盘
  5. 写入内存

同样的,我们需要对其进行进行加锁操作,以保证线程安全

并对异常进行处理

代码实现如下:

// 创建队列
public boolean queueDeclare(String queueName, boolean durable, boolean exclusive, boolean autoDelete,
                            Map<String, Object> arguments) {
    // 把队列的名字, 给拼接上虚拟主机的名字.
    queueName = virtualHostName + queueName;
    try {
        synchronized (queueLocker) {
            // 1. 判定队列是否存在
            MSGQueue existsQueue = memoryDataCenter.getQueue(queueName);
            if (existsQueue != null) {
                System.out.println("[VirtualHost] 队列已经存在! queueName=" + queueName);
                return true;
            }
            // 2. 创建队列对象
            MSGQueue queue = new MSGQueue();
            queue.setName(queueName);
            queue.setDurable(durable);
            queue.setExclusive(exclusive);
            queue.setAutoDelete(autoDelete);
            queue.setArguments(arguments);
            // 3. 写硬盘
            if (durable) {
                diskDataCenter.insertQueue(queue);
            }
            // 4. 写内存
            memoryDataCenter.insertQueue(queue);
            System.out.println("[VirtualHost] 队列创建成功! queueName=" + queueName);
        }
        return true;
    } catch (Exception e) {
        System.out.println("[VirtualHost] 队列创建失败! queueName=" + queueName);
        e.printStackTrace();
        return false;
    }
}

🌴删除队列

删除队列我们分为以下四步:

  1. 更改队列名
  2. 查询队列是否存在,若不存在,抛出异常返回即可
  3. 删除硬盘上的数据
  4. 删除内存上的数据

同样,为了线程安全,我们同样需要进行加锁操作。

并进行异常处理

代码实现如下:

// 删除队列
public boolean queueDelete(String queueName) {
    queueName = virtualHostName + queueName;
    try {
        synchronized (queueLocker) {
            // 1. 根据队列名字, 查询下当前的队列对象
            MSGQueue queue = memoryDataCenter.getQueue(queueName);
            if (queue == null) {
                throw new MqException("[VirtualHost] 队列不存在! 无法删除! queueName=" + queueName);
            }
            // 2. 删除硬盘数据
            if (queue.isDurable()) {
                diskDataCenter.deleteQueue(queueName);
            }
            // 3. 删除内存数据
            memoryDataCenter.deleteQueue(queueName);
            System.out.println("[VirtualHost] 删除队列成功! queueName=" + queueName);
        }
        return true;
    } catch (Exception e) {
        System.out.println("[VirtualHost] 删除队列失败! queueName=" + queueName);
        e.printStackTrace();
        return false;
    }
}

⭕总结

关于《【消息队列开发】 虚拟主机设计——操作队列》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

相关文章
|
27天前
|
消息中间件 网络协议 Java
【消息队列开发】 实现BrokerServer类——本体服务器
【消息队列开发】 实现BrokerServer类——本体服务器
|
20天前
|
消息中间件 监控 应用服务中间件
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
|
20天前
|
消息中间件 Java 测试技术
消息队列 MQ操作报错合集之设置了setKeepAliveInterval(1)但仍然出现客户端未连接,该怎么解决
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
20天前
|
消息中间件 设计模式 网络安全
消息队列 MQ操作报错合集之broker启用controller配置时,遇到报错,是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
20天前
|
消息中间件 Apache RocketMQ
消息队列 MQ操作报错合集之设置了controller后,有一主一从,但只显示一个,该怎么解决
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
6天前
|
消息中间件 Java Spring
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
13 0
|
9天前
|
消息中间件 存储 Java
消息队列-死信队列
消息队列-死信队列
12 0
|
20天前
|
消息中间件 测试技术 开发工具
消息队列 MQ操作报错合集之收到"WARN RocketmqClient - consumeMessage Orderly return"警告,是什么原因
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
20天前
|
消息中间件 网络安全 网络虚拟化
消息队列 MQ操作报错合集之如何实现公网访问内网RocketMQ集群
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
20天前
|
消息中间件 RocketMQ
消息队列 MQ操作报错合集之无法自动创建topic,该怎么办
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。