
activeMQ支持多种通讯协议TCP/UDP等,我们选取最常用的TCP来分析activeMQ的通讯机制。首先我们来明确一个概念:
客户(Client):消息的生产者、消费者对activeMQ来说都叫作客户。
消息中转器(Message broker):它是activeMQ的核心,它接收信息并进行相关处理后分发给消息消费者。
为了能清楚的描述出activeMQ的核心通讯机制,我们选择3个部分来进行说明,它们分别是建立链接、关闭链接、心跳。
一、Client跟activeMQ的TCP通讯的初始化过程分析如下:
1. activeMQ初始化时,通过TcpTransportServer类根据配置打开TCP侦听端口,客户通过该端口发起建立链接的动作。
2. 把accept的Socket放入阻塞队列中。
3. 另外一个线程Socket handler阻塞着等待队列中是否有新的Socket,如果有则取出来。
4. 生成一个TransportConnection的实例。TransportConnection类的主要作用是处理链路的状态信息,并实现CommandVisitor接口来完成各类消息的处理。
5. TransportConnection会使用一个由多个TransportFilter实例组成的消息处理链条,负责对接收到的各类消息进行处理并发送相应的应答。这个链条的典型组成顺序:MutexTransport->WireFormatNegotiator->InactivityMonitor->TcpTransport。在这条链条中最后的一环就是TcpTransport类,它是实际和Client获取和发送数据的地方,该类的重要方法有run()和oneway(),一个负责读取,一个负责发送。
6. 建链完成,可以进行通讯操作。
二、关闭链接
activeMQ发现TCP链接的关闭,最关键的代码在TcpBufferedInputStream类中的
int n = in.read(buffer, position, buffer.length - position);
三、心跳
为了更好的维护TCP链路的使用,activeMQ采用了心跳机制作为判断双方链路的健康情况。activeMQ使用的是双向心跳,也就是activeMQ的Broker和Client双方都进行相互心跳,但不管是Broker或Client心跳的具体处理情况是完全一样的,都在InactivityMonitor类中实现,下面具体介绍。
心跳会产生两个线程“InactivityMonitor ReadCheck”和“InactivityMonitor WriteCheck”,它们都是Timer类型,都会隔一段固定时间被调用一次。ReadCheck线程主要调用的方法是readCheck(),当在等待时间内,有消息接收到,则该方法会返回true。WriteCheck线程主要调用的方法是writeCheck(),这有个小技巧,大家可以参考一下,那就是当WriteCheck线程休眠时,有任何数据发送成功,则该线程被唤醒后,不用通过TCP向对方真的发送心跳消息,这样可以从一定程度上减少网络传输的数据量。
activeMQ的通讯处理机制还有很多,如断开重连等等,非常希望大家可以有兴趣来一起补充。
后文待续。

- 大小: 47.5 KB
分享到:
相关推荐
10. **性能优化**:源码分析可以帮助我们理解ActiveMQ是如何进行性能优化的,例如批量发送、消息压缩、网络优化等。 深入研究ActiveMQ 5.5.0的源码,不仅可以帮助开发者理解消息中间件的基本工作原理,还能为开发...
10. **性能优化**:源码分析可以深入到ActiveMQ的内部优化,如消息批量发送、零拷贝技术、内存管理等,这些都是提升消息中间件性能的关键。 通过阅读和分析ActiveMQ 5.8的源码,开发者不仅可以提升对JMS规范的理解...
Apache ActiveMQ是业界广泛使用的开源消息中间件,它基于Java平台并遵循...通过分析`activemq-parent-5.7.0`目录下的源码,你可以逐步掌握这个强大的消息中间件的工作原理,进一步提升你的Java和分布式系统开发技能。
JMS是Java平台上的标准API,它定义了一组接口和规范,使得开发者可以使用不同的消息中间件产品,如ActiveMQ、RabbitMQ或Apache Kafka等。 本项目是个人业余时间开发的,实现了TCP通信方式,这意味着它通过TCP/IP...
常见的消息中间件有RabbitMQ、Apache Kafka和ActiveMQ等。消息中间件可以提供异步通信、解耦合和高可用性等功能,使得分布式系统中的组件可以独立工作,同时保持高效的通信。在"ThreadSocket"项目中,虽然名称未直接...
通过深入研究ActiveMQ 5.4.3的源码,开发者不仅能掌握消息中间件的工作机制,还能提升对JMS规范的理解,从而更好地在实际项目中应用和优化消息传递系统。在学习过程中,结合文档和社区资源,将有助于加快理解和解决...
**ActiveMQ配置文件详解** ...同时,ActiveMQ的源码分析也是一个深入学习的过程,可以揭示其内部工作原理,有助于解决实际问题。在实际操作中,记得根据自己的需求进行调整,确保服务器的稳定性和性能。
- **定义**:ActiveMQ 是 Apache 软件基金会所研发的一款开源消息中间件,它完全支持 JMS 1.1 和 J2EE 1.4 规范,能够作为 JMS Provider 实现消息传递功能。 - **功能**:ActiveMQ 的核心功能在于帮助实现高性能、高...
总结,Apache ActiveMQ 5.5.1是一个强大且灵活的消息中间件,它提供了稳定的消息传递机制,适用于构建分布式、高并发的系统。了解并熟练使用ActiveMQ,对于提升企业的IT架构质量和效率具有重要意义。
Apache ActiveMQ是Java平台上的一款开源消息中间件,它遵循了开放...通过下载并分析"apache-activemq-5.15.3.zip"中的源码或二进制文件,开发者可以深入理解其工作原理,并定制适合自己应用需求的消息传递解决方案。
Apache ActiveMQ是业界广泛使用的开源消息中间件,它遵循JMS(Java Message Service)标准,为分布式系统提供高效、可靠的异步通信。在本压缩包"lwl-activemq.zip_activemq_collect6i1"中,包含了与ActiveMQ相关的...
Apache ActiveMQ是开源的消息中间件,它支持多种消息协议,如AMQP、STOMP、MQTT等,并且具备高可用性和可扩展性。本篇文章将详细讲解如何配置ActiveMQ以实现静态集群。 静态集群是ActiveMQ提供的一种高可用性解决...
对于源码分析,可以深入研究Spring的JMS模板和监听容器的实现,理解它们如何与ActiveMQ交互,以及如何配置和定制以满足特定需求。对于工具使用,ActiveMQ的管理控制台可以帮助监控和管理消息队列,包括查看队列状态...
**源码分析** 了解ActiveMQ的内部工作原理,可以通过阅读源码来深入学习。ActiveMQ的源码主要由几个关键组件组成: 1. **Broker**:负责管理和调度消息,处理客户端的连接和断开,以及消息的存储和转发。 2. **...
在构建JMS(Java Message Service)时,Spring框架提供了一套完整的支持,使得开发者能够轻松地集成消息中间件,如ActiveMQ。 ActiveMQ是Apache软件基金会的一个开源项目,它是符合JMS规范的消息代理,用于实现异步...
虽然文中提到没有直接针对nanomsg的性能评测数据,但从zeromq和其他消息队列软件(如MSMQ、ActiveMQ、RabbitMQ)的对比来看,zeromq在性能方面表现出色。考虑到nanomsg是在zeromq基础上进一步优化而来的,我们有理由...
Android MQTT 源码分析主要涉及客户端库的实现,如何在 Android 平台上集成 MQTT 协议,以及如何通过 MQTT 进行数据的发布和订阅。 **1. MQTT 协议基础** MQTT 是基于 TCP/IP 的协议,采用发布/订阅模型,客户端...
结合文件名称“ActiveMQ+in+Action.pdf”,我们可以推断这份文档是关于ActiveMQ的,ActiveMQ是一个开源的消息中间件,它遵循Java消息服务(JMS)规范,用于处理应用程序之间的异步通信。 **ActiveMQ 知识点详解:**...
这可能涉及到各种协议,如RMI(远程方法调用)、TCP/IP、HTTP或专门的消息中间件如ActiveMQ、RabbitMQ或Kafka。理解如何设计和实现高效、可靠的节点间消息通信机制至关重要。 4. **源码分析**:标签中的“源码”...
综合以上分析,我们可以看出这个项目是一个使用Delphi语言编写的,通过Stomp协议与OpenMQ消息中间件交互的应用程序。它包括了连接管理、消息处理、通信适配器等多个组件,具有高度可定制性和扩展性。开发人员可以...