设置持久化
默认不持久化(默认是1),正常的开发模式当中,是需要持久化的
DeliveryMode.NON_PERSISTENT = 1 不开启持久化
DeliveryMode.PERSISTENT = 2 开启持久化
producer.setDeliveryMode(2);开启持久化
01.ActiveMQ持久化机制
步骤一:创建一个数据库
步骤二:配置activemq.xml配置文件
在persistenceAdapter加入如下配置
jdbcPersistenceAdapter :采用jdbc的持久化方案
dataSource:代表数据源
createTablesOnStartup:启动是否创建表
<!--createTablesOnStartup 启动是否创建表 第一次为true 后续为false-->
<!--在你第一次创建表的时候createTablesOnStartup改为true,存入了10条数据,在第二次运行的时候还是ture的话,从会重新创建表,那10条数据就不见了,在第二次运行的时候要把createTablesOnStartup改为false-->
<jdbcPersistenceAdapter dataSource="#activemq-db" createTablesOnStartup="true" />
步骤三:配置数据源
<bean id="activemq-db" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
步骤四:将数据库连接Jar放到activemq解压的lib文件夹下
步骤四:重新启动,重启后刷新数据库,会生成三张表
activemq_msgs用于存储消息,Queue和Topic都存储在这个表中:
ID:自增的数据库主键
CONTAINER:消息的Destination
MSGID_PROD:消息发送者客户端的主键
MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID
EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数
MSG:消息本体的Java序列化对象的二进制数据
PRIORITY:优先级,从0-9,数值越大优先级越高
activemq_acks用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存:
主要的数据库字段如下:
CONTAINER:消息的Destination
SUB_DEST:如果是使用Static集群,这个字段会有集群其他系统的信息
CLIENT_ID:每个订阅者都必须有一个唯一的客户端ID用以区分
SUB_NAME:订阅者名称
SELECTOR:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作
LAST_ACKED_ID:记录消费过的消息的ID。
表activemq_lock在集群环境中才有用,只有一个Broker可以获得消息&#