`

ActiveMQ中的消息持久性

    博客分类:
  • JMS
阅读更多
这文章是在网上看到的,还没来得及试验,先拿下来再说。   也不知道是不是原创,网址如下http://zhaiyl.spaces.live.com/blog/cns!939A197D2798715B!125.entry     
      ActiveMQ很好的支持了消息的持久性(Persistence)。消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和 ReliableMessaging结合起来应该是很好的保证了消息的可靠传送。  
      消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试。消息中心启动以后首先要检查制定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。  
      对于ActiveMQ,消息的持久化同样是很简单的,仅仅通过配置信息就可以实现。这里主要介绍两种不同的持久化方法。
High performance journal
      这是ActiveMQ基于开源的HOWL(High-speed ObjectWeb Logger),将HOWL扩展为可以存储任意大小的消息(HOWL只能存储固定大小的记录),实现的一种消息持久化方法。它可以快速的将消息存储在本地文件中,且这种文件是以一种类似数据库的方式管理的。这样,如果你发送了10,000个消息,可能只有很少数的消息没有发送成功,当达到一个 checkpoint的时候,journal将一批未成功消息通过JDBC存储到数据库,这样避免了多次的数据库操作,很大程度上提高了性能并且保证了可靠性。  
      配置方法非常简单,就是无需配置,呵呵。ActiveMQ默认支持Journal,在activemq.xml配置文件中,可以找到如下信息:


Code:
<persistenceAdapter>
       <journaledJDBC journalLogFiles="5" journalLogFileSize="1024" dataDirectory="${activemq.home}/activemq-data"/>
    </persistenceAdapter>


[Ctrl+A Select All]


      这里可以改动的就是journalLogFiles,这个属性是制定默认创建几个数据文件来存储消息。journalLogFileSize为数据文件大小,默认为20MB。dataDirectory指向了存储数据文件的位置。
使用MySQL进行消息持久化  
      ActiveMQ持久几乎所有数据库(因为是通过JDBC把消息存储到数据库的)。方法同样简单,就是配置信息稍微有点变化。


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


[Ctrl+A Select All]


      其中dataSource指定了所用数据源的名字为mysql-ds。需要在activemq.xml文件中的<broker>标签之外配置数据源。下面是MySql的配置信息。


Code:
 <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/activemq?relaxAutoCommit=true"/>
       <property name="username" value="gos2"/>
       <property name="password" value="gos2"/>
       <property name="poolPreparedStatements" value="true"/>
    </bean>


[Ctrl+A Select All]


      大多数信息的含义是很清楚的,需要注意的是relaxAutoCommit需要设置为true,不知道什么含义。不同数据库的配置信息可能有些不一样,还需要自己再查一下。  
      配置文件修改好之后,将所选数据库的JDBC驱动包下载之后放到%ACTIVEMQ_HOME%/lib/下,然后启动%ACTIVEMQ_HOME%/bin/activemq.bat。
      需要注意的一个地方是:ActiveMQ使用MySQL持久化消息是,需要首先创建数据库,上面配制信息中可以看到,数据库的名字是activemq。启动activemq.bat之后,会在数据库中创建表。我使用MySQL4.1,出现了max key lengh...错误,原因就是ActiveMQ创建的表使用三个字段的组合作为主键,每个字段时varchar(250),加起来是750个varchar,如果按一个verchar2个字节(据说如果采用utf-8编码,可能会是3个字节??),超出了MySQL允许的1024字节。我曾试图更改MySQL的设置,没有成功,最后手动的那控制台打印出来的SQL语句中的250都换成了100,创建了这个表,然后把其他创建的表删掉。然后重新启动activemq.bat,成功!!!:)
      这样,消息中心具有了消息持久化功能,还需要做的就是消息发送者在发送消息的时候要采用JMS中的PERSISTENT模式发送消息。示例代码如下:


Code:
    MessageProducer producer = session.createProducer(destination);
    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
    /
    / 如果不想持久化可用下面语句
    //producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);


[Ctrl+A Select All]


这样,你的消息无论怎么发,都可以成功了。
分享到:
评论

相关推荐

    activemq消息持久化所需Jar包

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它支持多种协议,如AMQP、STOMP、MQTT等,且提供了消息持久化功能,确保在系统故障后仍能恢复消息,保持数据完整性。本主题主要围绕“activemq消息持久化所需Jar包...

    activeMQ mysql 持久化

    标题中的“ActiveMQ MySQL 持久化”指的是在使用ActiveMQ消息中间件时,将消息数据存储到MySQL数据库中以实现数据的持久化。ActiveMQ是Apache软件基金会的一个开源项目,它是一个功能丰富的消息代理,支持多种消息...

    ActiveMQ订阅模式持久化实现

    1. **配置持久化策略**:在ActiveMQ的配置文件中,需要开启消息持久化。这通常涉及修改`activemq.xml`,设置`&lt;destinationPolicy&gt;`元素中的`&lt;policyEntry&gt;`,将`persistent`属性设为`true`,以确保消息在存储和传输...

    ActiveMQ中Topic持久化Demo

    总结起来,ActiveMQ中的Topic持久化涉及到消息和订阅的持久化,通过合理的配置和编程接口,我们可以确保在系统故障后,消息传递的连续性和完整性。在实际应用中,了解和掌握这部分知识对于构建可靠和容错的分布式...

    ActiveMQ配置Mysql8为持久化方式所需Jar包.rar

    在分布式消息传递系统中,Apache ActiveMQ 是一个广泛使用的开源消息代理,它支持多种协议,并提供了高可用性和可扩展性。在生产环境中,为了保证消息的可靠性,通常会使用持久化存储来保存消息,即使在服务重启后也...

    springboot集成activemq实现消息接收demo

    此外,ActiveMQ支持多种协议和特性,如topic、持久化、事务消息等,可以根据项目需求进一步探索和利用。 这个简单的Demo展示了如何在Spring Boot中集成ActiveMQ进行消息接收。通过这种方式,你可以构建出一个可靠的...

    activeMQ发送消息返回消息

    在实际应用中,ActiveMQ的配置和使用可能更复杂,需要考虑安全性、性能优化、持久化、网络拓扑等因素。同时,JMS规范也提供了许多高级特性,如消息选择器、消息组、消息优先级等,这些都可以根据业务需求进行灵活...

    ActiveMQ学习笔记之九--发送消息到队列中

    学习ActiveMQ不仅要理解如何发送消息到队列,还需要了解如何设置持久性、队列的生命周期管理、消息确认机制、网络配置、监控和性能调优等方面。深入理解这些知识点,可以帮助开发者构建更健壮、高可用的分布式系统。...

    SpringBoot快速玩转ActiveMQ消息队列

    它提供了高可用性、可伸缩性和持久性,确保消息的可靠传输,使得分布式系统中的组件可以解耦并独立工作。 **二、SpringBoot与ActiveMQ整合** SpringBoot简化了ActiveMQ的配置过程。在SpringBoot应用中,我们可以...

    简单的activemq点对点的同步消息模型

    这通过在消息发送时设置消息的持久性标志实现。如果消息被持久化,那么即使消费者在消息到达时未在线,当它重新连接时也能接收到消息。 9. **安全性与隔离**:ActiveMQ提供了用户认证和权限控制,可以限制不同用户...

    activeMQ收发工具.rar

    7. **持久化与非持久化消息**:了解消息的持久性配置,这决定了消息在服务器重启后是否仍然可用。 8. **事务处理**:学习如何在ActiveMQ中使用JMS事务确保消息的一致性和可靠性。 9. **性能监控**:ActiveMQ提供了...

    Activemq原理文档

    在持久性测试中,Activemq将消息存储在磁盘上,而在非持久性测试中,Activemq将消息存储在内存中。 异步发送 Activemq支持异步发送模式,这样可以提高消息传输的性能。在异步发送模式下,消息生产者将消息发送到...

    spring使用activeMQ实现消息发送

    本文将深入探讨如何在Spring环境中使用ActiveMQ来实现消息的发送与接收,以提高系统的可扩展性和解耦性。 首先,我们需要了解Spring对ActiveMQ的支持。Spring提供了`spring-jms`模块,它包含了一组丰富的API和配置...

    activemq持久化jdbc所需jar包.zip

    标题中的"activemq持久化jdbc所需jar包.zip"指的是Apache ActiveMQ消息中间件在使用JDBC(Java Database Connectivity)进行消息持久化时所需的库文件集合。ActiveMQ是一款开源、高性能、跨语言的企业级消息代理,它...

    Spring+ActiveMQ消息队列+前台接收消息

    5. **消息的持久化**:ActiveMQ允许配置消息的持久性,即使服务器重启,未被消费的消息也不会丢失。在Spring配置中,可以通过设置`JmsTemplate`的`deliveryPersistent`属性为`true`来实现。 6. **事务管理**:...

    ActiveMQ收发消息Demo

    此外,ActiveMQ还提供了许多高级特性,例如消息优先级、持久化、消息分页、消息重试和死信队列等。在实际应用中,你可以根据需求利用这些特性优化消息处理流程。 在压缩包文件"ActiveMQ-5.15"中,可能包含了...

    7道消息队列ActiveMQ面试题!

    在面试中,面试官可能会问到关于ActiveMQ的一些基础和深入的问题,比如ActiveMQ的特性、消息传递机制、故障处理、消息持久化、性能调优以及消息消费等方面的知识。 1. ActiveMQ的核心概念和功能 ActiveMQ提供了多种...

    ActiveMQ开发规范及方案

    持久化是指ActiveMQ对消息的持久化,即ActiveMQ将消息保存到存储设备中,以便在系统重启后可以恢复消息。ActiveMQ提供了多种持久化方式,例如jdbc、kahadb等。 介绍 持久化是 ActiveMQ 的一个重要特性,用于确保...

    ActiveMQ消息总线介绍

    - **XML配置**:ActiveMQ的核心配置文件位于`conf/activemq.xml`中,这里可以设置各种参数,比如Broker的名称、监听端口、持久化策略等。 - **Java配置**:除了传统的XML配置外,还可以通过Java代码的方式进行配置。...

    ActiveMQ消息中间件面试题.pdf

    默认情况下,ActiveMQ中的非持久化消息采用异步发送,而持久化消息则采用同步发送方式,这可能导致在某些硬件环境下发送速度缓慢。为了解决这一问题,可以通过以下方法提高效率: - 在发送持久化消息时启用事务模式...

Global site tag (gtag.js) - Google Analytics