ActiveMQ使用手册Word文档格式.docx
《ActiveMQ使用手册Word文档格式.docx》由会员分享,可在线阅读,更多相关《ActiveMQ使用手册Word文档格式.docx(47页珍藏版)》请在冰豆网上搜索。
2.1.2.5临时目的地 4
2.1.2.6持久订阅 4
2.1.2.7本地事务 5
2.2ActiveMQ基本配置 5
2.2.1配置ActiveMQ服务IP和端口 5
2.2.2监控ActiveMQ 6
2.3ActiveMQ的Broker 7
2.3.1RunningBroker:
7
2.3.2EmbeddedBroker:
8
2.4ActiveMQBroker的Transport 9
2.4.1TCPTransport 10
2.4.2FailoverTransport 10
2.4.3DiscoverTransport 12
2.5ActiveMQBroker的持久方式 14
2.5.1AMQMessageStore 14
2.5.2KahaMessageStore 16
2.5.3JDBCMessageStore 16
2.6ActimveMQ的其他特性 17
2.6.1异步发送消息 17
2.6.2消费者异步分派 18
2.6.3消费者优先级 18
2.6.4独占消费者 18
2.6.5消息重发策略 19
2.6.6目标相关的属性 20
2.6.7消息预取处理 21
2.6.8配置连接URL 22
2.6.9消息重发与死信管理 25
第三章ActiveMQ集群方式 28
3.1AMQ集群特点 28
3.2AMQ集群方式--Queueconsumerclusters 28
3.3AMQ集群方式--Brokerclusters 29
3.3.1管道订阅conduitSubscriptions 31
3.3.2双向网络连接(duplexnetworkConnector) 32
3.3.3指定和限制Destination 32
3.3.4被卡住的消息 33
3.3.5其他说明 34
3.4AMQ集群方式--MasterSlave 34
3.4.1PureMasterSlave 35
3.4.2SharedFileSystemMasterSlave 35
3.4.3JDBCMasterSlave 35
第四章ActiveMQ+Mongodb集群实践 37
4.1AMQ+Mongodb的群集 37
第五章ActiveMQ的JMX监控 38
5.1JMX的配置 43
5.2JMX的JAVA端获取信息 43
第六章ActiveMQ的使用注意 45
6.1发现数据中存在queue:
//ActiveMQ.DLQ 45
6.2对应的客户端URL配置 45
第44页
第一章 前言
1.1编写目的
某平台的消息队列采用ActiveMQ来实现,搭建分布式消息平台,提供可靠的传递消息及数据的消息服务,实现平台间的消息传递。
本文档第二部分介绍了ActiveMQ的原理和重要配置介绍,第三部门介绍群集搭建方式,分析各种集群方式的优缺点,第四部分实战搭建Master-Slave+Broker-Custer的群集,第五部分是对ActiveMQ的监控,可以通过JMX接口直接获取当前的消息情况,第六部分是对ActiveMQ使用要注意的情况。
对于清楚JMS和ActiveMQ熟悉的,需要对ActiveMQ做集群处理,可以跳过第二、三章直接看第四章实践。
1.2术语
1.3参考文档
第二章ActiveMQ介绍
2.1ActiveMQ的原理
ActiveMQ是基于JMS的息中间件。
下面先介绍一下JMS的基本构件.
2.1.1JMS的基本构件
2.1.1.1连接工厂
连接工厂是客户用来创建连接的对象,ActiveMQ提供的连接工厂类为:
ActiveMQConnectionFactory。
2.1.1.2会话
JMSSession是生产和消费消息的一个单线程上下文。
会话用于创建消息生产者(producer)、消息消费者(consumer)和消息(message)等。
会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。
客户端用Session创建MessageProducer和MessageConsumer对象。
如果在Session关闭时,有一些消息已经被收到,但还没有被签收(acknowledged),那么,当消费者下次连接到相同的队列时,这些消息还会被再次接收。
2.1.1.3目的地
目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。
JMS1.0.2规范中定义了两种消息传递域:
点对点(PTP)消息传递域和发布/订阅消息传递域。
在点对点消息传递域中,目的地被成为队列(queue);
在发布/订阅消息传递域中,目的地被成为主题(topic)。
点对点消息传递域的特点如下:
·
每个消息只能有一个消费者。
消息的生产者和消费者之间没有时间上的相关性。
无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
发布/订阅消息传递域的特点如下:
每个消息可以有多个消费者。
生产者和消费者之间有时间上的相关性。
订阅一个主题的消费者只能消费自它订阅之后发布的消息。
JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。
持久订阅允许消费者消费它在未处于激活状态时发送的消息。
2.1.1.4生产者
消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。
2.1.1.5消息消费者
消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。
消息的消费可以采用以下两种方法之一:
同步消费。
通过调用消费者的receive方法从目的地中显式提取消息。
receive方法可以一直阻塞到消息到达。
异步消费。
客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。
2.1.1.6消息
JMS消息由以下三部分组成:
消息头。
每个消息头字段都有相应的getter和setter方法。
消息属性。
如果需要除消息头字段以外的值,那么可以使用消息属性。
除了消息头中定义好的标准属性外,JMS提供一种机制增加新属性到消息头中,这种新属性包含以下几种:
1.应用需要用到的属性;
2.消息头中原有的一些可选属性;
3.JMSProvider需要用到的属性。
标准的JMS消息头包含以下属性:
消息头
描述
JMSDestination
消息发送的目的地
JMSDeliveryMode
传送模式,有两种模式:
PERSISTENT和NON_PERSISTENT,
PERSISTENT表示该消息一定要被送到目的地,否则会导致应用错误。
NON_PERSISTENT表示偶然丢失该消息是被允许的,
这两种模式使开发者可以在消息传送的可靠性和吞吐量之间找到平衡点。
JMSExpiration
消息过期时间,等于Destination的send方法中的
timeToLive值加上发送时刻的GMT时间值。
如果timeToLive
值等于零,则JMSExpiration被设为零,表示该消息永不过期。
如果发送后,在消息过期时间之后消息还没有被发送到目
的地,则该消息被清除。
JMSPriority
消息优先级,从0-9十个级别,0-4是普通消息,5-9
是加急消息。
JMS不要求JMSProvider严格按照这十个
优先级发送消息,但必须保证加急消息要先于普通消息到达。
JMSMessageID
唯一识别每个消息的标识,由JMSProvider产生。
JMSTimestamp
一个消息被提交给JMSProvider到消息被发出的时间。
JMSCorrelationID
用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。
JMSReplyTo
提供本消息回复消息的目的地址
JMSType
消息类型的识别符。
JMSRedelivered
如果一个客户端收到一个设置了JMSRedelivered属性的消息,
则表示可能客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。
消息体。
JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage。
2.1.2JMS的可靠性机制
当所有的消息必须被接收,则用持久订阅模式。
当丢失消息能够被容忍,则用非持久订阅模式。
2.1.2.1消息确认
JMS消息只有在被确认之后,才认为已经被成功地消费了。
消息的成功消费通常包含三个阶段:
客户接收消息、客户处理消息和消息被确认。
在事务性会话中,当一个事务被提交的时候,确认自动发生。
在非事务性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgementmode)。
该参数有以下三个可选值:
Session.AUTO_ACKNOWLEDGE。
当客户成功的从receive方法返回的时候,或者从MessageListener.onMessage方法成功返回的时候,会话自动确认客户收到的消息。
Session.CLIENT_ACKNOWLEDGE。
客户通过消息的acknowledge方法确认消息。
需要注意的是,在这种模式中,确认是在会话层上进行:
确认一个被消费的消息将自动确认所有已被会话消费的消息。
例如,如果一个消息消费者消费了10个消息,然后确认第5个消息,那么所有10个消息都被确认。
Session.DUPS_ACKNOWLEDGE。
该选择只是会话迟钝第确认消息的提交。
如果JMSprovider失败,那么可能会导致一些重复的消息。
如果是重复的消息,那么JMSprovider必须把消息头的JMSRedelivered字段设置为true。
2.1.2.2持久性
JMS支持以下两种消息提交模式:
PERSISTENT。
指示JMSprovider持久保存消息,以保证消息不会因为JMSprovider的失败而丢失。
NON_PERSISTENT。
不要求JMSprovider持久保存消息。
2.1.2.3优先级
可以使用消息优先级来指示JMSprovider首先提交紧急的消息。
优先级分10个级别,从0(最低)到9(最高)。
如果不指定优先级,默认级别是4。
需要注意的是,JMSprovider并不一定保证按照优先级的顺序提交消息。
2.1.2.4消息过期
可以设置消息在一定时间后过期,默认是永不过期。
2.1.2.5临时目的地
可以通过会话上的createTemporaryQueue方法和createTemporaryTopic方法来创建临时目的地。
它们的存在时间只限于创建它们的连接所保持的时间。
只有创建该临时目的地的连接上的消息消费者才能够从临时目的地中提取消息。
2.1.2.