持久化ActiveMq到Mysql中,默认的配置是持久化到kahadb里面,我们可以修改存储为 Mysql里面。kahadb是一个基于内存的数据库,所以效率是相对于mysql高的。
配置activemq.xml
修改persistenceAdapter
修改为mysql来做持久化
#修改配置文件
vim apache-activemq-5.11.1/conf/activemq.xml
#这个是默认配置,使用的是kahadb
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
修改为mysql的db
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds"/>
</persistenceAdapter>
设定采用mysql,mysql-ds 表示的数mysql的数据连接池的配置,需要在broker节点外面定义,
配置数据源
另外需要在broker节点的外面定义id为mysql-ds的数据源配置
<!--创建数据连池-->
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.0.7:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
创建数据库
配置好了activemq.xml,需要配置一个数据库,创建数据库,并赋予远程访问的权限。
-- 创建activemq数据库
DROP DATABASE IF EXISTS activemq;
CREATE DATABASE activemq;
-- 开启远程访问
GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
-- 开启远程访问
GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
添加驱动
添加驱动到apache-activemq-5.11.1/lib的目录下
wget http://yellowcong.qiniudn.com/mysql-connector-java-5.1.21.jar
测试
添加数据
切记,消息的发送模式是,DeliveryMode.PERSISTENT,这样数据库才能持久化,获取到信息
package com.yellowcong.provice;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 创建用户:狂飙的yellowcong<br/>
* 创建日期:2017年12月9日<br/>
* 创建时间:上午11:01:51<br/>
* 机能概要:
*/
public class DemoSendMessage {
// activemq的服务器地址
private static final String ACTIVEMQ_HOST = "tcp://192.168.100.10:61616";
// 用户名
private static final String USERNAME = "yellowcong";
// 密码
private static final String PASSWORD = "yellowcong";
public static void main(String[] args) throws Exception {
provider();
}
/**
* 创建用户:狂飙的yellowcong<br/>
* 创建日期:2017年12月9日<br/>
* 创建时间:上午10:48:03<br/>
* 机能概要: 生产消息
*
* @throws Exception
*/
public static void provider() throws Exception {
// 获取连接
Connection conn = null;
try {
conn = getConnection();
// 获取session
Session session = conn.createSession(true, Session.CLIENT_ACKNOWLEDGE);
// 创建队列
// 需要和activemq.xml配置文件的队列对上
Destination destination = session.createQueue("queue1");
// 获取生产者
MessageProducer pro = session.createProducer(destination);
// 创建消息
TextMessage msg = session.createTextMessage();
// 发送消息
// 第一个参数 消息的目的地 Destination
// 第二个参数 发送的消息
// 第三个参数 消息的模式 DeliveryMode
// 第四个参数 消息的优先级
// 第五个参数 消息存活时间 存活时间单位是ms
for (int i = 0; i < 10; i++) {
msg.setText("请确认消息,消息添加顺序"+i+",优先级" + i);
pro.send(destination, msg, DeliveryMode.PERSISTENT, i, 1000 * 60);
}
// 提交事物
session.commit();
System.out.println("-----------------发送消息----------------");
} finally {
// 关闭连接
conn.close();
}
}
/**
* 创建用户:狂飙的yellowcong<br/>
* 创建日期:2017年12月9日<br/>
* 创建时间:上午10:42:48<br/>
* 机能概要: 获取连接
*
* @return
* @throws Exception
*/
public static Connection getConnection() throws Exception {
// 1.获取工厂连接类
ConnectionFactory fc = new ActiveMQConnectionFactory(USERNAME, PASSWORD, ACTIVEMQ_HOST);
// 2.获取连接
Connection conn = fc.createConnection();
conn.start();
System.out.println("-----------------获取连接----------------");
return conn;
}
}