ActiveMQ基于JmsTemplate的持久化

持久化需要满足两个条件:
  1)消息服务开启了持久化功能;
  2)生产者发送持久化消息
注:笔者建议MQ服务开启持久化功能,生产者根据消息内容的重要性、量级来合理使用持久化或不使用持久化
本文主要描述,消息服务的默认持久化功能及存储,不涉及定制存储方式。本文描述JmsTemplate的发送消息时如何设置是否支持持久化,其他使用方式类同

一、ActiveMQ开启持久化功能(默认开启)

1、支持持久化

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">
<persistenceAdapter>
	<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

注:persistent默认为true,此时生效
2、关闭持久化

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true"  persistent="false">

二、JmsTemplate(生产者设置)

注:前提是消息服务开启来持久化,不然此处任你如何设置都是不支持持久化操作的
1、JmsTemplate持久化关键源码(只列出了与持久化相关的源码)

package org.springframework.jms.core;

public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations {
  	......
    private boolean explicitQosEnabled; //是否使用deliveryMode配置
    private int deliveryMode; // 1非持久化,2持久化,详见常量定义
    ......
    public JmsTemplate() {
    	......
        this.explicitQosEnabled = false;
        this.deliveryMode = 2;
        ......
    }
	......
    public void setExplicitQosEnabled(boolean explicitQosEnabled) {
        this.explicitQosEnabled = explicitQosEnabled;
    }

    public boolean isExplicitQosEnabled() {
        return this.explicitQosEnabled;
    }

    public void setDeliveryPersistent(boolean deliveryPersistent) {
        this.deliveryMode = deliveryPersistent ? 2 : 1;
    }

    public void setDeliveryMode(int deliveryMode) {
        this.deliveryMode = deliveryMode;
    }

    public int getDeliveryMode() {
        return this.deliveryMode;
    }
    ......
    protected void doSend(MessageProducer producer, Message message) throws JMSException {
        if (this.isExplicitQosEnabled()) {
            producer.send(message, this.getDeliveryMode(), this.getPriority(), this.getTimeToLive());
        } else {
            producer.send(message);
        }

    }
    ......

由源码可知,如需配置JmsTemplate是否支持持久化,需配置三个属性:explicitQosEnabled, deliveryMode, deliveryPersistent
2、开启持久化:默认开启,可不配置(笔者认为最好显示的配置,不然版本升级,默认策略改变的化会有坑)

<!-- 支持持久化 -->
    <bean id="persistentJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="cacheConnectionFactory" />
        <property name="receiveTimeout" value="0" />
        <property name="explicitQosEnabled" value="true" />
        <property name="deliveryMode" value="2" />
        <property name="deliveryPersistent" value="true" />
    </bean>

3、关闭持久化

<!-- 不支持持久化 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="cacheConnectionFactory" />
        <property name="receiveTimeout" value="0" />
        <property name="explicitQosEnabled" value="true" />
        <property name="deliveryMode" value="1" />
        <property name="deliveryPersistent" value="false" />
    </bean>

ActiveMQ延迟队列

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值