🍃前言
本次开发任务
- 实现对队列的操作
- 主要实现对队列的增加与删除
🎄添加队列
添加队列操作我们可以分为以下五步:
- 更改队列名
- 判断队列是否存在
- 创建队列对象
- 将该对象写入硬盘
- 写入内存
同样的,我们需要对其进行进行加锁操作,以保证线程安全。
并对异常进行处理
代码实现如下:
// 创建队列 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; } }
🌴删除队列
删除队列我们分为以下四步:
- 更改队列名
- 查询队列是否存在,若不存在,抛出异常返回即可
- 删除硬盘上的数据
- 删除内存上的数据
同样,为了线程安全,我们同样需要进行加锁操作。
并进行异常处理:
代码实现如下:
// 删除队列 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; } }
⭕总结
关于《【消息队列开发】 虚拟主机设计——操作队列》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下