张家界建设网站,深圳网站建设及推广,男人直接做的视频网站,wordpress百度seo优化插件文章目录 一、数据库管理1.设计数据库2.添加sqlite依赖3.配置application.properties文件4.创建接口MetaMapper5.创建MetaMapper.xml文件6.数据库操作7.封装数据库操作 二、文件管理1.消息持久化2.消息文件格式3.序列化/反序列化4.创建文件管理类MessageFileManager5.垃圾回收 … 文章目录 一、数据库管理1.设计数据库2.添加sqlite依赖3.配置application.properties文件4.创建接口MetaMapper5.创建MetaMapper.xml文件6.数据库操作7.封装数据库操作 二、文件管理1.消息持久化2.消息文件格式3.序列化/反序列化4.创建文件管理类MessageFileManager5.垃圾回收 三、统一管理数据库和文件 一、数据库管理
1.设计数据库 交换机、队列、绑定是交给数据库来管理的所以设计这三个表结构就够了表的字段和核心类同名。 2.添加sqlite依赖
!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc --dependencygroupIdorg.xerial/groupIdartifactIdsqlite-jdbc/artifactIdversion3.41.0.0/version/dependency3.配置application.properties文件
spring.datasource.urljdbc:sqlite:./data/meta.db
spring.datasource.username
spring.datasource.password
spring.datasource.driver-class-nameorg.sqlite.JDBC
mybatis.mapper-locationsclasspath:mybatis/*Mapper.xml4.创建接口MetaMapper
在mqserver包下新创建一个包名字为mapper在此包下创建一个接口MetaMapper。添加注解Mapper
5.创建MetaMapper.xml文件
在resource目录下创建一个目录mybatis在此目录下新建一个MetaMapper.xml文件。
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.mq.mqserver.mapper.MetaMapper/mapper6.数据库操作
建库操作会在程序启动时由mybatis在./data/meta.db这里自动生成。 所以这里只用针对交换机、队列、绑定创建表以及简单的插入、删除、查询操作就够了。 MetaMapper: MetaMapper.xml:
7.封装数据库操作
新建一个包datacenter创建一个类DatabaseManager,封装上述的数据库操作。
初始化数据库 准备工作因为我们不打算把当前类注入容器所有需要手动从上下文中获取Bean对象。在启动类中获取上下文。 如果数据库已经存在什么都不做检查./data/meta.db是否存在
如果不存在创建目录建表插入默认数据。 删除数据库文件及目录 删除文件./data/meta.db 删除目录./data 封装交换机、队列、绑定操作 二、文件管理
1.消息持久化 将消息持久化就是将消息存储到文件中。 在data目录下每个队列又对应一个子目录与队列名一致。子目录下有两个文件一个是消息内容文件queue_data.txt一个是消息统计文件(queue_stat.txt)。 形如 2.消息文件格式
queue_data.txt 消息内容文件 实例 queue_stat.txt 消息统计文件 消息总数数 /t 有效消息数 形如2300/t1800
3.序列化/反序列化
在common包下添加一个公共工具类BinaryTool实现序列化、反序列化 序列化 1.把byte数组写到ByteArrayOutputStream 2.用ObjectOutputStream关联ByteArrayOutputStream 3.调用ObjectOutputStream的writeObject方法将object序列化成二进制数据写入ByteArrayOutputStream中 4.调用ByteArrayOutputStream的toByteArray输出byte[]数组 反序列化 1.使用ByteArrayInputStream读取byte数组 2.使用ObjectInputStream关联ByteArrayInputStream 3.使用ObjectInputStream的readObject方法读取字节数组出来再反序列化成Object对象使用Object接收 4.返回Object对象
4.创建文件管理类MessageFileManager
获取目录 消息统计文件读写 将消息统计文件的内容封装成一个类Stat。属性有消息总数有效消息数。 创建目录及文件 删除目录及文件 检查文件是否存在 写入消息文件 以追加的方式写入到文件中。 删除消息逻辑删除 定位到消息所处文件的位置将消息反序列化出来修改isValid为0x0然后写回文件原位置。 读取消息文件
5.垃圾回收 此处约定当消息总数超过2000并且有效消息数小于30%时触发垃圾回收机制。 此处的垃圾回收机制采用复制算法。 触发垃圾回收 垃圾回收
三、统一管理数据库和文件
创建DiskDataCenter整合数据库和文件。
初始化封装交换机、队列创建队列时创建目录删除队列时删除目录、绑定操作封装消息操作