设置activemq5.1.0 persistent

下面是activemq的原话,讲明persistent发送与non-persistent发送的区别

ActiveMQ supports both persistent and non-persistent delivery. The persistence flag is set on the MessageProducer.

The main difference is that if you are using persistent delivery, messages are persisted to disk/database so that they will survive a broker restart. When using non-persistent delivery, if you kill a broker then you will lose all in-transit messages.

The effect of this difference is that persistent messaging is usually slower than non-persistent delivery, particularly when not using Async Sends.

意思我就不在这里翻译,不过我可以举一个例子,比如我们的消息生产客户发送一条消息到activemq的一个队列目标,发送完毕后关闭activemq,然后在启动activemq,在用接收着接收队列中的消息,按照默认的设置,是能接收到的,因为activemq在关闭时(甚至是在刚接到消息生产者这条消息时)就把没有被消费的消息做了持久化。

 

值得注意的是,activemq默认的是persistent发送。在它的配置文件

%activemq_home%/conf/activemq.xml中有如下设置,来实现持久化发送配置声明(即使不配置此项,也会有默认的配置,而默认的配置与这里显示声明的与此相差不大)。配置内容如下:

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

        ..................

        <persistenceAdapter>
            <amqPersistenceAdapter syncOnWrite="false" directory="${activemq.base}/data" maxFileLength="20 mb"/>
        </persistenceAdapter>

        ...................

</broker>

 

然而,如果我们想设置成不持久化发送的数据呢(当然,这样会速度从理论上将将会有所提高,但是安全性能将大打折扣)。

配置也很简单,如下:

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

        .........................

        <!--

        <persistenceAdapter>
            <amqPersistenceAdapter syncOnWrite="false" directory="${activemq.base}/data" maxFileLength="20 mb"/>
        </persistenceAdapter>

         -->

        ...........................

    </broker>

注意上面<broker>多出了一个属性设置 persistent="false", 并且切忌要注掉或者干脆直接删除persistenceAdapter子元素,否则persistent="false"的设置竟会被忽略。

 

好了,如果只是想简单的配置,上面的已经够用了。如果想进一步的了解,请参考官方文档:

http://activemq.apache.org/what-is-the-difference-between-persistent-and-non-persistent-delivery.html

http://activemq.apache.org/persistence.html

 

更多内容

我们自然也可以在程序中控制是不是进行持久化

假设我们有一个消息生产者(发送者),MessageProducer 类型的对象 publisher

可以用如下语句实现程序控制而不用劳烦去更改消息中间件的原有配置:

            publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);    //不持久化

            publisher.setDeliveryMode(DeliveryMode.PERSISTENT);             //持久化

你可能感兴趣的:(apache,html,xml,中间件,activemq)