经典JMS中间件ActiveMQ介绍PPT资料.pptx
- 文档编号:14029518
- 上传时间:2022-10-17
- 格式:PPTX
- 页数:41
- 大小:552.89KB
经典JMS中间件ActiveMQ介绍PPT资料.pptx
《经典JMS中间件ActiveMQ介绍PPT资料.pptx》由会员分享,可在线阅读,更多相关《经典JMS中间件ActiveMQ介绍PPT资料.pptx(41页珍藏版)》请在冰豆网上搜索。
客户进程和服务对象进程都必须正常运行;
如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;
(3)点对点通信:
客户的一次调用只发送给某个单独的目标对象。
MOM在系统中的位置,JMS模型,Java消息服务应用程序结构支持两种模型:
1.点对点模型(基于队列)每个消息只能有一个消费者。
消息的生产者和消费者之间没有时间上的相关性.可以由多个发送者,但只能被一个消费者消费。
一个消息只能被一个接受者接受一次生产者把消息发送到队列中(Queue),这个队列可以理解为电视机频道(channel)在这个消息中间件上有多个这样的channel接受者无需订阅,当接受者未接受到消息时就会处于阻塞状态2.发布者/订阅者模型(基于主题的)每个消息可以有多个消费者。
生产者和消费者之间有时间上的相关性。
订阅一个主题的消费者只能消费自它订阅之后发布的消息.允许多个接受者,类似于广播的方式生产者将消息发送到主题上(Topic)接受者必须先订阅注:
持久化订阅者:
特殊的消费者,告诉主题,我一直订阅着,即使网络断开,消息服务器也记住所有持久化订阅者,如果有新消息,也会知道必定有人回来消费。
JMS消息发送模式,Topic发送模式,JMS公共接口,JMS的基本构件,连接工厂:
连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。
连接:
JMSConnection封装了JMS客户端到JMSProvider的连接与JMS提供者之间的一个虚拟的连接。
会话:
JMSSession是生产和消费消息的一个单线程上下文。
会话用于创建消息的生产者(producer),消费者(consumer),消息(message)等,会话,是一个事务性的上下文。
消息的生产和消费不能包含在同一个事务中。
JMS的基本构件,生产者:
MessageProducer由Session对象创建的用来发送消息的对象消费者:
MessageConsumer由Session对象创建的用来发送消息的对象消息:
Messagejms消息包括消息头和消息体以及其它的扩展属性。
JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage。
目的地:
Destination,消息的目的地,是用来指定生产的消息的目标和它消费的消息的来源的对象。
消息队列:
Queue点对点的消息队列消息主题:
Tipic发布订阅的消息队列,Jms消息发送时序图,Jms消息发送开发流程,1、生产者(producer)开发流程(ProducerTool.java):
1.1创建Connection:
根据url,user和password创建一个jmsConnection。
1.2创建Session:
在connection的基础上创建一个session,同时设置是否支持事务和ACKNOWLEDGE标识。
1.3创建Destination对象:
需指定其对应的主题(subject)名称,producer和consumer将根据subject来发送/接收对应的消息。
1.4创建MessageProducer:
根据Destination创建MessageProducer对象,同时设置其持久模式。
1.5发送消息到队列(Queue):
封装TextMessage消息,使用MessageProducer的send方法将消息发送出去。
2、消费者(consumer)开发流程(ConsumerTool.java):
2.1实现MessageListener接口:
消费者类必须实现MessageListener接口,然后在onMessage()方法中监听消息的到达并处理。
2.2创建Connection:
根据url,user和password创建一个jmsConnection,如果是durable模式,还需要给connection设置一个clientId。
2.3创建Session和Destination:
2.4创建replyProducer【可选】:
可以用来将消息处理结果发送给producer。
2.5创建MessageConsumer:
根据Destination创建MessageConsumer对象。
2.6消费message:
在onMessage()方法中接收producer发送过来的消息进行处理,并可以通过replyProducer反馈信息给producer,Jms消息订阅者流程图,JMS消息的事务,1.创建事务createSession(paramA,paramB);
paramA是设置事务的,paramB设置acknowledgmentmode(应答模式)paramA设置为false时:
paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
2.事务的应答确认A)paramA设置为true时:
paramB的值忽略,acknowledgmentmode被jms服务器设置SESSION_TRANSACTED。
当一个事务被提交的时候,消息确认就会自动发生。
B)paramA设置为false时:
Session.AUTO_ACKNOWLEDGE为自动确认,当客户成功的从receive方法返回的时候,或者从MessageListener.onMessage方法成功返回的时候,会话自动确认客户收到的消息。
Session.CLIENT_ACKNOWLEDGE为客户端确认。
客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。
jms服务器才会删除消息。
(默认是批量确认)DUPS_OK_ACKNOWLEDGE允许副本的确认模式。
一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收,而且允许重复确认。
如果是重复的消息,那么JMSprovider必须把消息头的JMSRedelivered字段设置为true。
消费者的消费方式,下两种方法之一:
同步消费。
通过调用消费者的receive方法从目的地中显式提取消息。
receive方法可以一直阻塞到消息到达。
异步消费。
客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。
实现MessageListener接口,在MessageListener()方法中实现消息的处理逻辑。
JMS的通信机制,activeMQ支持多种通讯协议TCP/UDP等,我们选取最常用的TCP来分析activeMQ的通讯机制。
首先我们来明确一个概念:
客户(Client):
消息的生产者、消费者对activeMQ来说都叫作客户。
消息中转器(Messagebroker):
它是activeMQ的核心,它接收信息并进行相关处理后分发给消息消费者。
为了能清楚的描述出activeMQ的核心通讯机制,我们选择3个部分来进行说明,它们分别是建立链接、关闭链接、心跳。
一、Client跟activeMQ的TCP通讯的初始化过程分析如下:
1activeMQ初始化时,通过TcpTransportServer类根据配置打开TCP侦听端口,客户通过该端口发起建立链接的动作。
2把accept的Socket放入阻塞队列中。
3另外一个线程Sockethandler阻塞着等待队列中是否有新的Socket,如果有则取出来。
4生成一个TransportConnection的实例。
TransportConnection类的主要作用是处理链路的状态信息,并实现CommandVisitor接口来完成各类消息的处理。
5TransportConnection会使用一个由多个TransportFilter实例组成的消息处理链条,负责对接收到的各类消息进行处理并发送相应的应答。
这个链条的典型组成顺序:
MutexTransport-WireFormatNegotiator-InactivityMonitor-TcpTransport。
在这条链条中最后的一环就是TcpTransport类,它是实际和Client获取和发送数据的地方,该类的重要6建链完成,可以进行通讯操作。
方法有run()和oneway(),一个负责读取,一个负责发送。
二、关闭链接activeMQ发现TCP链接的关闭,最关键的代码在TcpBufferedInputStream类中的intn=in.read(buffer,position,buffer.length-position);
三、心跳为了更好的维护TCP链路的使用,activeMQ采用了心跳机制作为判断双方链路的健康情况。
activeMQ使用的是双向心跳,也就是activeMQ的Broker和Client双方都进行相互心跳,但不管是Broker或Client心跳的具体处理情况是完全一样的,都在InactivityMonitor类中实现,下面具体介绍。
心跳会产生两个线程“InactivityMonitorReadCheck”和“InactivityMonitorWriteCheck”,它们都是Timer类型,都会隔一段固定时间被调用一次。
ReadCheck线程主要调用的方法是readCheck(),当在等待时间内,有消息接收到,则该方法会返回true。
WriteCheck线程主要调用的方法是writeCheck(),这有个小技巧,大家可以参考一下,那就是当WriteCheck线程休眠时,有任何数据发送成功,则该线程被唤醒后,不用通过TCP向对方真的发送心跳消息,这样可以从一定程度上减少网络传输的数据量。
ActiveMQ模型分析,首先介绍该模型中每个领域类的作用,然后再介绍它们之间的关系。
Broker:
activeMQ的一个整体代表RegionBroker:
负责分发broker的操作到相应的消息区域Region:
activeMQ目前有四种主要消息区域:
队列域(queueRegion)、主题域(topicRegion)、临时队列域(tempQueueRegion)、临时主题域(tempTopicRegion)TransportConnection:
代表一个通讯连接Destination:
消息的目的地,主要包括两种Queue、Topic两种Subscription:
消息的消费者、订阅者MessageStore:
消息持久化存储,象比较复杂的Kaha存储机制就放在这PendingMessageCursor:
等待发给消费者的消息分发指针ConnectionContext:
用来维护发送请求所需的连接上下文,ActiveMQ模型分析-静态模型,ActiveMQ模型分析,下面我们把这些领域类的关系进行一个描述:
1、一个RegionBroker
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 JMS 中间件 ActiveMQ 介绍