ActiveMQ 是 Apache 软件基金会研发的开源消息中间件,是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障,以下是关于 ActiveMQ 的详细介绍:
1、基本概念
消息:是在两台计算机间传送的数据单位,可以非常简单,如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
队列:是一种先进先出的数据结构,用于在消息的传输过程中保存消息,队列中的数据遵循先进先出原则,即先存入的消息先被取出。
主题(Topic):是一种更为复杂的消息模式,类似于广播模式,发送方将消息发布到特定的主题中,多个订阅者都可以接收到该消息,且每个订阅者接收到的是完整的消息。
2、主要特性
多语言和协议支持:支持 Java、C、C++、C#、Ruby、Perl、Python、PHP 等多种语言编写客户端,应用协议包括 OpenWire、Stomp REST、WS Notification、XMPP、AMQP 等。
遵循规范:完全支持 JMS 1.1 和 J2EE 1.4 规范,包括持久化、XA 消息、事务等功能。
与 Spring 集成:可以很容易地内嵌到使用 Spring 的系统中,并且支持 Spring2.0 的特性。
经过多种服务器测试:通过了常见 J2EE 服务器(如 Geronimo、JBoss 4、GlassFish、WebLogic 等)的测试,可通过 JCA 1.5 resource adaptors 的配置,自动部署到兼容 J2EE 1.4 的商业服务器上。
支持多种传送协议:如 in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA 等。
高性能的集群:从设计上保证了高性能的集群,支持客户端 服务器、点对点的架构。
支持 Ajax:可以在浏览器中使用 Ajax 技术与 ActiveMQ 进行交互。
支持与 Axis 整合:方便与其他基于 SOAP 的服务进行集成。
易于测试:可以很容易地调用内嵌 JMS provider,进行测试。
3、工作原理
生产者(Producer):负责发送消息到 ActiveMQ 的队列或主题中,生产者可以是任何能够产生消息的应用程序或组件。
消费者(Consumer):通过 ActiveMQ 支持的传输协议连接到 ActiveMQ,从队列或主题中接收消息并进行处理,消费者可以是任何需要处理消息的应用程序或组件。
存储机制:ActiveMQ 使用内存和文件系统来存储消息,当消息被发送到队列或主题中时,ActiveMQ 会将消息存储在内存中,如果内存中的消息数量超过了一定限制,ActiveMQ 会将部分消息存储到文件系统中。
消息确认机制:消费者在成功接收到消息后,需要向 ActiveMQ 发送一个确认消息,以表示已经成功处理了该消息,如果消费者没有发送确认消息,ActiveMQ 会认为该消息没有被成功处理,可能会重新发送该消息。
4、应用场景
异步处理:在一些业务流程中,某些操作可能需要较长时间才能完成,如果让这些操作同步执行,会导致整个业务流程的响应时间变长,通过将这些操作作为消息放入 ActiveMQ 中,可以让生产者立即返回,而不需要等待这些操作完成,从而提高系统的响应速度,用户注册成功后,发送注册成功的邮件和短信通知,可以将发送邮件和短信的操作封装成消息发送到 ActiveMQ 中,由专门的消费者去处理,这样用户的注册流程可以更快地完成。
应用解耦:不同的应用程序之间可能存在直接的依赖关系,如果其中一个应用程序出现故障或需要进行修改,可能会影响到其他应用程序,使用 ActiveMQ 可以实现应用程序之间的解耦,各个应用程序通过消息队列进行通信,只要保证消息格式不变,发送方和接收方不需要彼此联系,也不需要受对方的影响,订单系统和库存系统可以通过 ActiveMQ 进行解耦,订单系统在生成订单后,将订单信息发送到 ActiveMQ 中,库存系统从 ActiveMQ 中获取订单信息并进行库存更新,这样两个系统就可以独立地进行开发和维护。
流量削峰:在一些业务高峰期,系统可能会面临大量的请求,如果直接处理这些请求,可能会导致系统崩溃,通过将请求放入 ActiveMQ 中,可以缓冲请求流量,避免系统瞬间过载,在瞬秒活动中,大量的用户请求可以在第一时间被放入 ActiveMQ 中,然后系统按照一定的规则从队列中取出请求进行处理,这样可以有效地控制流量峰值,提高系统的稳定性。
日志处理:可以将系统中的日志信息发送到 ActiveMQ 中,然后由专门的日志处理程序进行收集、分析和存储,这样可以方便地对系统的运行情况进行监控和审计。
消息通讯:在不同的系统或模块之间进行消息通讯,实现数据的共享和交互,在一个分布式系统中,各个节点之间可以通过 ActiveMQ 进行消息通讯,同步数据状态等。
5、安装步骤
资源下载:从 ActiveMQ 官网(http://activemq.apache.org/)下载 ActiveMQ 的压缩包。
版本说明:ActiveMQ5.10.x 以上版本必须使用 JDK1.8 才能正常使用;ActiveMQ5.9.x 及以下版本使用 JDK1.7 即可正常使用,但 JDK 可以向下兼容,即 JDK1.8 也可以使用 ActiveMQ5.9 的版本。
上传解压并复制:一般会将下载的压缩包复制到/usr/local/
目录下,并为其起别名activemq
。
查看权限:查看是否有查看其 bin 目录的权限,如果cd bin
提示权限不足,则使用chmod 755 activemq
命令修改权限。
启动并测试:进入 bin 目录,执行./activemq start
命令启动 ActiveMQ,然后使用ps aux | grep activemq
命令测试是否启动成功,启动成功后,关闭防火墙(service iptables stop
)。
访问管理界面:使用浏览器访问 ActiveMQ 管理应用,地址为http://安装 activemq 的主机 ip:8161/admin/
,用户名和密码均为admin
。
6、相关术语
Destination:目的地,JMS Provider(消息中间件)负责维护,用于对 Message 进行管理的对象,MessageProducer 需要指定一个 Destination 来发送消息,而 MessageConsumer 需要指定一个 Destination 来接收消息。
Connection:连接,表示客户端与 ActiveMQ 服务器之间的连接,客户端通过创建连接来与 ActiveMQ 服务器进行通信。
Session:会话,是客户端与 ActiveMQ 服务器之间的一次交互过程,在一个会话中,客户端可以发送和接收多个消息。
MessageProducer:消息生产者,负责创建和发送消息到 ActiveMQ 服务器。
MessageConsumer:消息消费者,负责从 ActiveMQ 服务器接收消息并进行处理。
1、ActiveMQ 支持哪些消息类型?
答:ActiveMQ 支持多种消息类型,包括 StreamMessage(Java 原始值的数据流)、MapMessage(一套名称 值对)、TextMessage(一个字符串对象)、ObjectMessage(一个序列化的 Java 对象)、BytesMessage(一个未解释字节的数据流)等。
2、ActiveMQ 中的队列和主题有什么区别?
答:队列是点对点的模式,发送到队列的消息只有一个消费者能收到;而主题是发布订阅模式,发送到主题的消息可以被多个订阅者接收,默认情况下,如果没有订阅者接收主题中的消息,消息会消失,但可以通过设置调整数据销毁时间。
ActiveMQ 作为一款强大的开源消息中间件,在企业级应用中发挥着重要作用,它的高可用性、出色的性能、可扩展性和稳定性等特点,使其成为众多开发者和企业的首选,无论是异步处理、应用解耦还是流量削峰等场景,ActiveMQ 都能提供有效的解决方案,它还具备丰富的功能和灵活的配置选项,能够满足不同用户的需求,在使用 ActiveMQ 时,也需要根据具体的业务场景进行合理的配置和优化,以确保其性能和可靠性,希望本文的介绍能帮助你更好地理解和使用 ActiveMQ。