ActiveMq之持久化到Mysql数据库-yellowcong

持久化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;

    }
}

测试结果

这里写图片描述

转载于:https://my.oschina.net/u/1987703/blog/1617594

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值