ActiveMQ持久化之JDBC

centos7下配置ActiveMQ持久化至Mysql

首先下载ActiveMQ http://activemq.apache.org/ 并解压

然后将mysql驱动包拷贝至lib包下

修改

apache-activemq-5.16.0下配置文件

vim conf/activemq.xml

 

文件中的持久化适配器

修改前为默认的kahaDB持久插件,此插件基于日志,类似redis的aop,微型数据库,在这里就具体不介绍了

        <persistenceAdapter>
            <kahaDB directory="${activemq.data}/kahadb"/>
        </persistenceAdapter>

修改后jdbc,其中一个属性createTablesOnStartup默认为true  , 为启动时自动创建三张表,可以在创建表之后关闭,下面我没写,至于表在最后有说明

修改成下面


        <persistenceAdapter>
            <jdbcPersistenceAdapter dataSource="#mysql-ds"/>
        </persistenceAdapter>

然后添加mysql数据库连接池在 <import resource="jetty.xml"/> 上面粘贴即可,bean ID 对应着mysl-ds

    <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.93.1/activemq?relaxAutoCommit=true"/>
        <property name="username" value="activemq"/>
        <property name="password" value="activemq"/>
        <property name="poolPreparedStatements" value="true"/>
    </bean>

别忘记你的数据库username  和 password 修改成自己的,还有jdbc数据库连接地址

数据库连接池我这边使用的是默认的,这个地方连接池使用的是org.apache.commons.dbcp2.BasicDataSource的连接池 

官方给的连接池是org.apache.commons.dbcp.BasicDataSource,会提示报错找不到类

Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource

commons-dbcp升级到commons-dbcp2 数据库连接池的连接配置也发生了变化并且属性名也变了

在版本1.x中最大活动连接数属性名称为:maxActive 版本2.x中最大活动连接数属性名称为:maxTotal

最后我们创建activemq为名称的数据库,数据库字符集默认即可 如果选择utf8mb4 的话会报

 ALTER TABLE ACTIVEMQ_ACKS ADD PRIORITY BIGINT DEFAULT 5 NOT NULL Message: Table 'activemq.activemq_acks' doesn't exist SQLState: 42S02 Vendor code: 1146 | org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter | main
2020-11-14 20:14:19,262 | WARN  | Failure details: Table 'activemq.activemq_acks' doesn't exist | org.apache.activemq.store.jdbc.JDBCPersistenceAdapter | main
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'activemq.activemq_acks' doesn't exist

错误

其原因官网解释

Specified key was too long; max key length is 1000 bytes is the error not allowing the creation of ACTIVEMQ_ACKS

You are probably using utf8/some other multibyte encoding as the collation in your database…

Switch it to latin1 or ASCII… The varchar fields that the key is composed of add up to less than 1000 characters but with a multibyte encoding the key length is over 1000 bytes.

接下来进入bin包下启动activemq

./activemq start

记得关闭防火墙,或者开启数据库的进出入端口,否则拦截访问不到数据库

会在activemq库中生成三张表

分别是

    activemq_msgs  消息内容,发送后会添加相应记录,消费完后会自动删除
    activemq_acks  存储持久订阅的消息
    activemq_lock  锁表

此时在生产消息后,未消费消息会在msgs表中看到消息的存在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值