ActiveMQ 配置文件详解
参考,http://jackyin5918.iteye.com/admin/blogs/2004138
下面是补充
1.broker元素(代理的属性)
--当前代理为备机代理
shutdownOnMasterFailure,默认值为false,如果配置为true,则主机失效后,备机代理(当前代理)会自动关闭
--当前代理为主机代理
waitForSlave 默认值为false ,如果配置为true,则主机代理在备机连接好之前,不接收任何客户端和网络连接
shutdownOnSlaveFailure 默认值为false ,如果配额为true,则与备机失去连接后,主机代理会自动关闭.
这样就保证了备机与主机永远是同步的.
2 destinationPolicy 元素(消息目的地策略配置)
官方文档:http://activemq.apache.org/per-destination-policies.html
分发策略:http://activemq.apache.org/dispatch-policies.html
该元素是broker子元素 配置示例如下:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="FOO.>">
<dispatchPolicy>
<roundRobinDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry topic="ORDERS.>">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<!-- 1 minutes worth -->
<subscriptionRecoveryPolicy>
<timedSubscriptionRecoveryPolicy recoverDuration="60000" />
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry topic="PRICES.>">
<!-- lets force old messages to be discarded for slow consumers -->
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="10"/>
</pendingMessageLimitStrategy>
<!-- 10 seconds worth -->
<subscriptionRecoveryPolicy>
<timedSubscriptionRecoveryPolicy recoverDuration="10000" />
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry tempTopic="true" advisoryForConsumed="true" />
<policyEntry tempQueue="true" advisoryForConsumed="true" />
</policyEntries>
</policyMap>
</destinationPolicy>
上面示例配置 仅仅配置了 dispatchPolicy(分发策略) 和 subscriptionRecoveryPolicy(订阅恢复策略)
更多策略,参考http://activemq.apache.org/schema/core/activemq-core-5.8.0-schema.html#policyEntry
policyEntry元素 属性 及其子元素
(1) 分发策略 dispatchPolicy
参考 :http://activemq.apache.org/dispatch-policies.html
http://activemq.apache.org/what-is-the-prefetch-limit-for.html
参考 http://jackyin5918.iteye.com/blog/2004238 了解 prefetch limit参数
因为,ActiveMQ 设计成高性能和高吞吐量,所以默认时ActiveMQ尝试已最快的速度达到
消息消费者的prefetch limit值.
而默认的prefetch limit配置可能不适合有些应用场景.
比如,假设只发送了很少数量的消息,但是默认时prefetch limit值很大,此时消息可能只发
送给一个消费者了.另外,假如只发送很少数量的消息,并且每一个消息的处理时间很长,同时
有很多消费者,因为prefetch limit设置过大,则消息值发给同一个消费者,所有消息由这一个
消费者处理,其他消费者闲置造成资源浪费,消息处理时间增长.
主要介绍两种 <roundRobinDispatchPolicy /> 随机发送策略 和 <strictOrderDispatchPolicy /> 严格发送策略
对于队列来说,可以设置分发策略为 随机分发,还是严格分发.
随机分发是尽可能随机发送消息给消费者,而严格分发是发送消息给上一个消费者,直到消息数量
达到该消费者设置的prefetch limit,然后再选择下一个消费者发送消息.
对于主题来说,默认的策略是 SimpleDispatchPolicy ,该策略将消息发送给所有订阅者.
SimpleDispatchPolicy 优先网络分发策略将消费发送给来自高优先级网络中的消费者
this is useful in a loop network topology where there is more than route to a consumer.
(2)<pendingMessageLimitStrategy>
Sets the strategy to calculate the maximum number of messages that are
allowed to be pending on consumers (in addition to their prefetch sizes).
Once the limit is reached, non-durable topics can then start discarding old
messages. This allows us to keep dispatching messages to slow consumers
while not blocking fast consumers and discarding the messages oldest first.
http://activemq.apache.org/slow-consumer-handling.html
针对慢速消费者采取的策略.
慢速消费者在订阅非持久化主题时可能会导致问题.因为慢速消费者会强制代理将消息缓存在其
内存中,一旦内存填满了,代理会强制消息生产者降低生产消息的速度.这样就降低了快速消费者
的处理速度.因为消息生产者不再快速产生消息了.
Currently we have a strategy that lets you configure the maximum number of
matched messages the broker will keep around for a consumer in addition to
its prefetch buffer. Once this maximum is reached, as new messages come in,
older messages are discarded. This allows you to keep the RAM for current
messages and keep sending messages to a slow consumer but to discard old
messages.
当前使用一种策略,让你可以配置 在消费者中缓存的未确认的消息数量超过prefetch limit后,
代理可以为每一个消费者缓存的消息数量.一旦缓存的消息数量超过这个设置的值,则缓存的旧
消息将会被抛弃(就是代理每一个消息消费者缓存的数量有限制了,这样代理用于每个消费者缓存消息
的空间就小了,这样为所有消费者缓存消息的空间之和就小了).这样可以节约代理的RAM,进而可以缓
存更多消息,也就不会轻易的将代理缓存充满,代理就不会强迫消息消费者减慢生产消息的速度.
这样,随着生产者继续快速生产消息,快速消费者仍然可以快速消费消息.
有两种策略:
<constantPendingMessageLimitStrategy limit="50"/> 表示在消费者的消息
达到prefetch limit值后,代理会为每个消费者缓存固定数量的消息,这里配置为50个.
<prefetchRatePendingMessageLimitStrategy multiplier="2.5"/> 配置为prefetch limit值 倍数
上面配置表示代理会为每个消费者缓存消息个数为 prefetch limit值 * 2.5
(3)<subscriptionRecoveryPolicy>
文档:http://activemq.apache.org/subscription-recovery-policy.html
针对非持久化(Non-Durable)主题而言. 持久化(durable)主题和队列不在内存中缓存.
客户端需要在创建消费者之前,创建主题时采用特殊方式:
ConnectionFactory fac = new ActiveMQConnectionFactory();
Connection connection = fac.createConnection();
connection.start();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("TEST.TOPIC?consumer.retroactive=true");
MessageConsumer consumer = session.createConsumer(topic);
注意上面的session.createTopic("TEST.TOPIC?consumer.retroactive=true");
中设置consumer.retroactive=true将创建的消费者设置为可追溯消费者.
文档:http://activemq.apache.org/retroactive-consumer.html
A retroactive consumer is just a regular JMS Topic consumer who
indicates that at the start of a subscription every attempt should be
used to go back in time and send any old messages (or the last message
sent on that topic) that the consumer may have missed.
可追溯消费者,是一个标准的主题消费者(注意是主题),可追溯表示在消费者开始订阅时,
代理要尽可能的及时尝试发送所有该消费者错过的任何该主题的旧消息
(或者发送给主题的最后一个消息).
限制
Retroactive consumer will not consistently work when used across a network of brokers.
In the case of topics, when we connect broker A to broker B, broker B will
send broker A all the subscriptions that it has received. Since Broker A
replicates messages to each subscription, and we want to avoid receiving
duplicates at broker B, we can't send broker A more than 1 subscription
for the same topic. So our network bridges keep track of the subscriptions
sent across and only send the first subscription to a topic. Subsequent
subscriptions increment the reference count of the subscription, but the
subscription is not actually sent.
This in essence is the problem. If the first subscription to a topic is
not retroactive, it is sent B to A, and the B broker will not get the
retroactive messages. Then subsequent subscriptions could be
(retroactive), but it will not cause retroactive message to sent from
broker A to broker B since the subsequent subscription will not be sent to
broker A.
涉及到重分发策略(Redelivery Policy,http://activemq.apache.org/redelivery-policy.html)
代理端就通过 <subscriptionRecoveryPolicy>配置策略
文档:http://activemq.apache.org/subscription-recovery-policy.html
常用策略如下:
THE ACTIVEMQ FIXED SIZE SUBSCRIPTION RECOVERY POLICY
ACTIVEMQ固定尺寸订阅恢复策略
THE ACTIVEMQ FIXED COUNT SUBSCRIPTION RECOVERY POLICY
固定数量策略
THE ACTIVEMQ QUERY-BASED SUBSCRIPTION RECOVERY POLICY
基于查询的策略
THE ACTIVEMQ TIMED SUBSCRIPTION RECOVERY POLICY
时间策略
THE ACTIVEMQ LAST IMAGE SUBSCRIPTION RECOVERY POLICY
最终映像策略
THE ACTIVEMQ NO SUBSCRIPTION RECOVERY POLICY
无缓存策略
3 主备机配置
拷贝一份主机的配置文件,作为备机配置文件,
然后在备机的配置文件中的broker元素下面添加配置
<services>
<masterConnector
remoteURI="tcp://remotehost:62001"
userName="Rob"
password="Davies"
/>
</services>
这种配置 在5.8版本中已经被移除了,不支持这种配置.
相关推荐
- 在Spring的XML配置文件(如`activemq-consumer.xml`和`activemq-producer.xml`)中,我们可以定义JMS的ConnectionFactory和Destination(队列或主题)。 - `activemq-consumer.xml`通常包含消息消费者的配置,...
在IT行业中,消息队列(Message Queue)是分布式系统...在Spring的配置文件(如`applicationContext.xml`)中,我们可以通过`<bean>`标签创建一个连接工厂(ConnectionFactory),并指定ActiveMQ服务器的URL: ```xml ...
Spring集成ActiveMQ配置详解 Spring框架与ActiveMQ的集成,为开发者提供了一种高效、可靠的JMS消息处理机制。在企业级应用中,这种集成能够极大地提升系统的响应速度和容错能力,特别是在需要异步通信和分布式事务...
对于初学者,理解这些基本元素是掌握ActiveMQ配置的关键。配合提供的文档,如《activeMQ in Action.doc》和《ActiveMQ测试报告.pdf》,可以更深入地学习ActiveMQ的工作原理和最佳实践。对于与数据库的集成,如`...
#### 一、ActiveMQ配置概览 ActiveMQ是一款非常流行的开源消息中间件,它基于Java开发,支持多种消息传递模式,如点对点(P2P)、发布/订阅(Pub/Sub)等。本文将详细介绍ActiveMQ的配置要点,包括Java内存调整、主从...
1. **创建 ZooKeeper 文件夹**:在 `/usr/local/` 下创建 `zookeeper` 文件夹用于存放 ZooKeeper 的配置文件。 2. **解压并配置 ZooKeeper**:对于每个节点,都需要解压 ZooKeeper 的安装包,并配置相应的 `myid` ...
### ActivemQ 配置详解 #### 一、理解 JMS(Java Message Service) ...以上步骤完成了 Apache ActiveMQ 的基本安装与配置,接下来可以根据实际需求进一步定制和优化 ActiveMQ 的配置文件,以满足特定的应用场景需求。
**ActiveMQ配置详解** Apache ActiveMQ是开源的Java消息服务(JMS)提供商,它作为企业级消息中间件,能够帮助应用程序之间进行异步通信。本文将深入探讨ActiveMQ的配置,包括安装、基本配置、高级特性以及源码分析...
解压缩安装包,设置启动 ActiveMQ 的默认配置文件,然后启动 ActiveMQ 服务。可以使用命令 ./activemq start 启动 ActiveMQ。 测试 ActiveMQ 启动 ActiveMQ 后,可以使用命令 netstat -an | grep 61616 查看 61616...
6. **安全性**:ActiveMQ支持用户认证和授权,可以通过配置文件设定不同用户的权限。 以上就是ActiveMQ环境的搭建以及一个简单的生产者和消费者实例。通过这个例子,你可以理解ActiveMQ如何在应用程序之间传递消息...
- 修改配置文件`conf/activemq.xml`,设置监听端口、日志级别等。 - 启动ActiveMQ服务:可以通过命令行方式启动,如`bin/activemq start`。 ##### 2. 管理界面访问 - **地址**:通常可以通过浏览器访问`...
1. **配置activemq.xml**:按照上述配置方法对activemq.xml文件进行相应的修改。 2. **批量消息发送**:向队列中发送大量消息进行测试。 3. **等待若干秒,消息减少**:等待一段时间后,观察消息数量的变化,验证...
- 配置ActiveMQ的XML配置文件,如`conf/activemq.xml`,调整端口、存储路径、网络设置等。 3. **Spring与ActiveMQ的集成** - 引入Spring的JMS模块依赖,如`spring-jms`。 - 创建`ConnectionFactory`,配置连接...
2. **修改配置文件** 编辑Tomcat的 `conf/context.xml` 文件,在 `<context>` 节点中添加以下资源定义: ```xml name="jms/FailoverConnectionFactory" auth="Container" type="org.apache.activemq....
使用`vi /etc/profile`编辑环境变量配置文件,在文件末尾添加以下内容: ``` #set java environment export JAVA_HOME=/usr/java/jdk1.8.0_121 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools...
2. **配置**:配置文件默认为conf/activemq.xml,可根据需求调整队列、主题、网络连接等设置。 3. **创建和消费消息**:使用JMS API或者ActiveMQ提供的客户端库,可以创建生产者发送消息,消费者接收消息。 4. **...