【RelayMQ】基于 Java 实现轻量级消息队列(五)
目录
一. 封装接口
1.1 初始化
1.2 封装交换机
1.3 封装消息队列
1.4 封装绑定关系
1.5 封装消息
封装所有硬件上面的操作,数据库和文件操作
一. 封装接口
封装这两个类中提供的方法
private DataBaseMange dataBaseMange = new DataBaseMange();private MessageFileManager messageFileManager = new MessageFileManager();
- DataBaseMange 类:负责对交换机,队列,绑定进行管理
- MessageFileManager 类:负责对消息进行管理
1.1 初始化
初始化数据库,完成建表操作和放入一个默认交换机
public void init(){dataBaseMange.init();messageFileManager.init();}
1.2 封装交换机
增加交换机
public void insertExchange(Exchange exchange){dataBaseMange.insertExchange(exchange);}
删除交换机
public void deleteExchange(String exchangeName){dataBaseMange.deleteExchange(exchangeName);}
查询所有的交换机
public List<Exchange> selectAllExchange(){return dataBaseMange.selectAllExchange();}
1.3 封装消息队列
db中增加消息队列并创建出数据文件和统计文件
public void insertMSGQueue(MSGQueue msgQueue) throws IOException {dataBaseMange.insertMSGQueue(msgQueue);//还需要创建出对应的文件messageFileManager.createQueueFile(msgQueue.getName());}
db中删除消息队列并清除掉相关的数据文件和统计文件
public void deleteMSGQueue(String msgQueueName) throws IOException {dataBaseMange.deleteMSGQueue(msgQueueName);messageFileManager.destroyFile(msgQueueName);}
从db中查询出所有的消息队列
public List<MSGQueue> selectAllMSGQueue(){return dataBaseMange.selectAllMSGQueue();}
1.4 封装绑定关系
增加绑定关系
public void insertBinding(Binding binding){dataBaseMange.insertBinding(binding);}
删除绑定关系
public void deleteBinding(Binding binding){dataBaseMange.deleteBinding(binding);}
查询所有的绑定关系
public List<Binding> selectAllBinding(){return dataBaseMange.selectAllBinding();}
1.5 封装消息
针对消息队列中的消息做出处理
发送消息到队列
public void sendMessage(MSGQueue msgQueue, Message message) throws IOException, MqException {messageFileManager.sendMessage(msgQueue, message);}
从队列中删除消息
这里在每次删除消息之后,都会进行一次gc判断,如果gc满足,则会进行一次垃圾回收
public void deleteMessage(MSGQueue msgQueue,Message message) throws IOException, ClassNotFoundException, MqException {messageFileManager.deleteMessage(msgQueue, message);if(messageFileManager.checkGC(msgQueue.getName())){messageFileManager.gc(msgQueue);}}
读取队列中所有消息
public LinkedList<Message> selectAllMessage(MSGQueue msgQueue) throws IOException, MqException, ClassNotFoundException {return messageFileManager.loadAllMessageFromQueue(msgQueue.getName());}
这里就是使用一个类,将两个部分整合到一起,对上层提供统一的调用接口