下面是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); //持久化
分享到:
相关推荐
NULL 博文链接:https://zhyt710.iteye.com/blog/250930
标签:activemq-jpa-store-5.1.0-javadoc.jar,activemq,jpa,store,5.1.0,javadoc,jar包下载,依赖包
在本案例中,我们讨论的是ActiveMQ的5.1.0版本,这在当时是一个较新的版本,特别适合于Flex应用程序中的即时消息传递需求,如构建聊天室等功能。 Java消息服务(JMS)是Java平台上的一个标准API,用于在分布式环境...
在"apache-activemq-5.1.0-src"中,我们获得的是ActiveMQ的源代码版本,这对于我们深入理解其内部工作原理、定制功能或进行二次开发非常有价值。 **Apache ActiveMQ概述** Apache ActiveMQ是一个开源的消息中间件,...
ActiveMQ-5.1.0是该产品的一个较早版本,包含了用于开发和运行ActiveMQ所需的核心组件和相关依赖库。 1. **activemq-core-5.1.0.jar**:这是ActiveMQ的核心库,包含ActiveMQ服务器的主要功能,如队列管理、主题发布...
标题中的"activemq-rar-5.1.0.rar"指的是Apache ActiveMQ的一个RAR(Resource Adapter Archive)版本,这是ActiveMQ的特定版本,用于在Java应用服务器中部署和管理消息代理服务。RAR文件是一种特殊格式的归档,通常...
配置文件可能包含了ActiveMQ的设置,如连接池大小、存储配置、网络拓扑等,这些都可能影响到ActiveMQ的性能和稳定性。如果包含自定义插件,那么问题可能与这些插件的兼容性或配置有关。 解决ActiveMQ问题通常涉及...
标签:activemq-ra-5.1.0.jar,activemq,ra,5.1.0,jar包下载,依赖包
标签:activemq-web-5.1.0.jar,activemq,web,5.1.0,jar包下载,依赖包
ActiveMQ 队列消息过期时间设置和自动清除解决方案 ActiveMQ 是一个开源的消息队列系统,用于实现分布式系统之间的异步通信。在使用 ActiveMQ 时,消息过期时间设置和自动清除是一个非常重要的问题。本文将介绍 ...
标签:activemq-xmpp-5.1.0.jar,activemq,xmpp,5.1.0,jar包下载,依赖包
标签:activemq-run-5.1.0.jar,activemq,run,5.1.0,jar包下载,依赖包
官方版本,亲测可用
在`/usr/local/apache-activemq/conf/jetty.xml`文件中找到`<Configure>`元素,并将其中的`useHabitRealm`属性设置为`true`: ```xml <Set name="UseHabitRealm"><True/> ``` - **配置用户名和密码**: 在`/...
activemq5.15.0-1 jar
标签:activemq-xmpp-5.1.0-javadoc.jar,activemq,xmpp,5.1.0,javadoc,jar包下载,依赖包
标签:activemq-web-5.1.0-sources.jar,activemq,web,5.1.0,sources,jar包下载,依赖包
标签:activemq-run-5.1.0-sources.jar,activemq,run,5.1.0,sources,jar包下载,依赖包
标签:activemq-ra-5.1.0-sources.jar,activemq,ra,5.1.0,sources,jar包下载,依赖包
标签:activemq-ra-5.1.0-javadoc.jar,activemq,ra,5.1.0,javadoc,jar包下载,依赖包