JMS学习八(ActiveMQ的消息持久化到Mysql数据库)

1、将连接Mysql数据库的jar文件,放到ActiveMQ的lib目录下

2、修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式

2.1  修改原来的kshadb的持久化数据的方式

<persistenceAdapter>
        <!--  <kahaDB directory="${activemq.data}/kahadb"/> -->
    <jdbcPersistenceAdapter  dataSource="#mysql-ds"/>
 </persistenceAdapter>  

2.2  连接Mysql的配置(注意配置文件放置的位置)

<!-- 用于持久化数据到Mysql数据库 -->
<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://localhost:3306/activemq?relaxAutoCommit=true"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
        <property name="maxActive" value="200"/>
        <property name="poolPreparedStatements" value="true"/>  

</bean> 

3、将数据持久化Mysql的运行截图

3.1  重新启动ActiveMQ,并运行程序,放入持久化数据,查看Mysql的active数据库

4、放入持久化数据的代码

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;  

public class Sender {  

    public static void main(String[] args) throws Exception {  

        // 1、建立ConnectionFactory工厂对象,需要填入用户名,密码,以及连接的地址
        // 仅使用默认。端口号为"tcp://localhost:61616"
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                "zhangsan",// ActiveMQConnectionFactory.DEFAULT_USER,
                "123",// ActiveMQConnectionFactory.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        // 2、通过ConnectionFactory工厂对象创建一个Connection连接
        // 并且调用Connection的start方法开启连接,Connection默认是不开启的
        Connection connection = connectionFactory.createConnection();
        connection.start();  

        // 3、通过Connection对象创建Session会话(上下文环境对象),
        // 参数一,表示是否开启事务
        // 参数二,表示的是签收模式,一般使用的有自动签收和客户端自己确认签收  

        // 第一个参数设置为true,表示开启事务
        // 开启事务后,记得要手动提交事务  

        Session session = connection.createSession(Boolean.TRUE,
                Session.CLIENT_ACKNOWLEDGE);  

        // 4、通过Session创建Destination对象,指的是一个客户端用来指定生产消息目标和消费消息来源的对象。
        // 在PTP模式中,Destination指的是Queue
        // 在发布订阅模式中,Destination指的是Topic
        Destination destination = session.createQueue("queue1");  

        // 5、使用Session来创建消息对象的生产者或者消费者
        MessageProducer messageProducer = session.createProducer(destination);  

        // 6、如果是,生产者,使用MessageProducer的setDeliverMode方法设置,消息的持久化和非持久化
        messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
        // 7、最后使用JMS规范的TextMessage形式创建数据(通过Session对象)
        // 并利用MessageProducer的send方法发送数据
        for (int i = 0; i < 5; i++) {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("我是消息" + i);
            messageProducer.send(textMessage);
        }  

        // 手动提交开启的事务
        session.commit();  

        // 释放连接
        if (connection != null) {
            connection.close();
        }
    }
}  

原文地址:https://www.cnblogs.com/alter888/p/8976943.html

时间: 2024-10-08 05:08:28

JMS学习八(ActiveMQ的消息持久化到Mysql数据库)的相关文章

JMS消息持久化,将ActiveMQ消息持久化到mySql数据库中

ActiveMQ5.8.0版本采用kahadb作为默认的消息持久化方式.使用默认的持久化机制,我们不容易直接看到消息究竟是如何持久的.ActiveMQ提供的JDBC持久化机制,能够将持久化信息存储到数据库.通过查看数据库中ActiveMQ生成的表结构和存储的数据,能够帮助我们更好的了解消息的持久化机制.现在介绍如何配置activemq,将数据持久化到mysql中. 1.配置activeMQ需要的mySql数据源 为了能够使用JDBC访问mysql数据库,显然必须要配置消息服务器的数据库源.在ac

JMS学习(八)-ActiveMQ Consumer 使用 push 还是 pull 获取消息

ActiveMQ是一个消息中间件,对于消费者而言有两种方式从消息中间件获取消息: ①Push方式:由消息中间件主动地将消息推送给消费者:②Pull方式:由消费者主动向消息中间件拉取消息.看一段官网对Push方式的解释: To be able to achieve high performance it is important to stream messages to consumers as fast as possible so that the consumer always has a

ActiveMQ 消息持久化到Mysql数据库

[[email protected] local]# tar -zxvf apache-activemq-5.15.8-bin.tar.gz[[email protected] local]# mv apache-activemq-5.15.8 activemq[[email protected] activemq]# cd conf/[[email protected] conf]# pwd/usr/local/activemq/conf[[email protected] conf]# cp

ActiveMQ的消息持久化机制

为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制. ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的. 就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件.内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试. 消息中心启动以后首先要检查指定的存储位置,如果有未发送成功的消息,则需要把消息发送出去. 1. J

JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系

一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent delivery),默认情况下使用的是持久传输. 可以通过MessageProducer 类的 setDeliveryMode方法设置传输模式: MessageProducer producer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); 持

JMS学习(七)-ActiveMQ消息的持久存储方式之KahaDB存储

一,介绍 自ActiveMQ5.4以来,KahaDB成为了ActiveMQ默认的持久化存储方式.相比于原来的AMQ存储方式,官方宣称KahaDB使用了更少的文件描述符,并且提供了更快的存储恢复机制. 二,KahaDB存储配置 在 conf/activemq.xml 中配置如下: <broker brokerName="broker" ... > <persistenceAdapter> <kahaDB directory="activemq-da

Apache ActiveMQ 持久化到MySQL数据库的简单配置

1.  前言 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位. 关于ActiveMQ 的详细介绍请参考:http://baike.baidu.com/view/433374.htm?fr=aladdin 关于JMS的详细介绍请参考:http://baike.baidu.com/su

Apache ActiveMQ 持久化到MySQL数据库

1.  前言 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位. 关于ActiveMQ 的详细介绍请参考:http://baike.baidu.com/view/433374.htm?fr=aladdin 关于JMS的详细介绍请参考:http://baike.baidu.com/sub

sql学习笔记(19)-----------浅谈 MySQL 数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队