前面已经使用数据库管理了交换机、绑定、队列,然后又使用了数据文件管理了消息。
那么,这里就创建一个类,讲之前的两个部分整合起来,对上层提供统一的一套接口,表示硬盘上存储的所有的类的信息。
/*
* 用这个类来管理所有硬盘上的数据
* 1.数据库:交换机、绑定、队列
* 2.数据文件:消息
* */
public class DiskDataCenter {
// 用这个示例来管理数据库中的数据
private DataBaseManger dataBaseManger = new DataBaseManger();
// 用这个表示数据文件中的数据
private MessageFileManger messageFileManger = new MessageFileManger();
public void init(){
// 针对上述的两个示例进行初始化
dataBaseManger.init();
messageFileManger.init();
}
/*封装数据库操作*/
// 封装交换机操作
public void insertExchange(Exchange exchange){
dataBaseManger.insertExchange(exchange);
}
public void deleteExchange(String exchangeName){
dataBaseManger.deleteExchange(exchangeName);
}
public List<Exchange> selectAllExchanges(){
return dataBaseManger.selectAllExchanges();
}
// 封装队列操作
public void insertQueue(MSGQueue queue) throws IOException {
dataBaseManger.insertQueue(queue);
// 创建队列的同时,不仅需要把队列对象写道数据库中,还需要创建出对应的目录和文件
messageFileManger.createQueueFiles(queue.getName());
}
public void deleteQueue(String queueName) throws IOException {
dataBaseManger.deleteQueue(queueName);
// 删除队列的同时,不仅需要把队列对象从数据库中删除,还需要删除出对应的目录和文件
messageFileManger.destroyQueueFiles(queueName);
}
public List<MSGQueue> selectAllQueues(){
return dataBaseManger.selectAllQueues();
}
// 封装绑定操作
public void insertBinding(Binding binding){
dataBaseManger.insertBinding(binding);
}
public void deleteBinding(Binding binding){
dataBaseManger.deleteBinding(binding);
}
public List<Binding> selectAllBindings(){
return dataBaseManger.selectAllBindings();
}
/*封装消息操作*/
// 发送操作
public void sendMessage(MSGQueue queue, Message message) throws IOException, MqException {
messageFileManger.sendMessage(queue,message);
}
// 删除操作
public void deleteMessage(MSGQueue queue,Message message) throws IOException, ClassNotFoundException, MqException {
messageFileManger.deleteMessage(queue, message);
if (messageFileManger.checkGC(queue.getName())){
messageFileManger.gc(queue);
}
}
// 将信息加载到内存
public LinkedList<Message> loadAllMessageFromQueue(String queueName) throws IOException, MqException, ClassNotFoundException {
return messageFileManger.loadAllMessageFromQueue(queueName);
}
}
创建了这个类,我们就不用去直接调用DataBaseManager和MessageFileManager里面得方法了。