ActiveMQ classic ,artemis ,artemis console ,nms clients,cms client详解
详细解析 ActiveMQ Classic、ActiveMQ Artemis、它们的控制台以及 NMS 和 CMS 客户端。
1. ActiveMQ Classic (原 ActiveMQ 5.x)
是什么?
ActiveMQ Classic 是 Apache 软件基金会下的开源、多协议、基于 Java 的消息代理(Message Broker)的传统版本。它是最广泛使用和久经考验的版本,通常直接被称为 “ActiveMQ”。
核心特性:
- 多协议支持: 原生支持多种协议,如 OpenWire(默认,高性能二进制协议)、STOMP、AMQP、MQTT、REST 等,允许不同技术的客户端连接。
- 持久化: 支持将消息持久化到各种存储中,如 KahaDB(默认、高性能)、JDBC(数据库)、LevelDB(已弃用)等,确保消息不丢失。
- 高级特性: 支持主从模式、网络桥接(Network of Brokers)、消息组、虚拟目的地、通配符订阅等复杂的企业级功能。
- 成熟稳定: 经过多年发展,社区庞大,非常稳定,拥有大量的生产部署案例。
架构:
主要基于阻塞式 I/O,每个连接对应一个线程。这在处理大量并发连接时可能成为资源瓶颈。
适用场景:
- 传统的企业级应用集成(EAI)。
- 需要与大量旧系统(使用不同协议)集成的场景。
- 对稳定性要求极高,且对极致性能要求不那么苛刻的项目。
2. ActiveMQ Artemis (原 HornetQ)
是什么?
ActiveMQ Artemis 是 下一代 的 ActiveMQ 消息代理。它源于 JBoss 的 HornetQ,在捐赠给 Apache 后重新命名。它并非 Classic 的简单升级,而是一个从头开始构建的全新架构。
核心特性与优势:
- 高性能非阻塞架构: 使用 Netty 框架实现了非阻塞 I/O,采用单线程“事件驱动”模型处理大量连接,性能极高,尤其在处理大量并发连接和低延迟场景中表现卓越。
- 强大的持久化: 使用 Journal(日志文件)进行高性能消息持久化,并可选搭配 JDBC 存储绑定信息。其持久化性能远超 Classic 的 KahaDB。
- 100% 协议无缝转换: 核心特性。Artemis 在协议层实现了完整的转换,例如,一个使用 AMQP 协议的生产者发送的消息,可以被一个使用 MQTT 协议的消费者接收,代理自动处理所有转换。
- LMAX Disruptor 集成: 在其核心大量使用了无锁高性能线程间通信库 LMAX Disruptor,进一步提升了吞吐量。
- 嵌入式友好: 可以非常容易地作为库嵌入到其他 Java 应用中。
与 Classic 的关系:
Artemis 是 ActiveMQ 项目的未来。Apache 官方的目标是让 Artemis 最终完全取代 Classic。对于新项目,强烈推荐直接使用 Artemis。
适用场景:
- 所有新项目和对性能有要求的项目。
- 云原生和微服务架构,需要处理万级并发连接。
- 需要多种协议(AMQP, MQTT, STOMP, OpenWire)互操作的物联网(IoT)场景。
- 需要极低延迟和高吞吐量的金融交易等场景。
3. Artemis Console (Web 控制台)
是什么?
ActiveMQ Artemis 自带了一个现代化的、功能丰富的 Web 管理控制台。它默认集成在 broker 中,无需像 Classic 那样额外安装 Hawtio 或 ActiveMQ Web Console。
如何访问:
Artemis 启动后,默认可以通过 http://<server-host>:8161/console
访问。
核心功能:
- 仪表盘: 总览消息数量、连接数、消费者数等。
- 目的地管理: 查看、创建、删除队列(Queues)和主题(Topics),查看消息列表(可以浏览消息头和数据),甚至可以发送测试消息。
- 连接管理: 查看所有客户端连接及其详细信息(IP、协议、会话等)。
- 日志查看: 直接在线查看 broker 的日志文件。
- JMX 操作: 提供了对底层 JMX MBean 的友好操作界面。
与 Classic 控制台对比:
Classic 的控制台功能相对简单和陈旧。Artemis Console 是全新的,功能更强大,用户体验更好,是 Artemis 的一大亮点。
4. NMS Client (Apache.NMS) 和 CMS Client (ActiveMQ-CPP)
这两个都是 C++ 语言的客户端库,用于连接 ActiveMQ broker,但它们是完全不同的项目。
NMS Client (Apache.NMS API for C++)
- 全称: NMS (Native Messaging Service)
- 本质: 它是一个 C++ 对 JMS API 的移植和实现。NMS 的目标是提供一个与 Java 中 JMS API 非常相似的编程模型给 C++ 开发者。
- 协议: 主要使用 OpenWire 协议与 ActiveMQ Classic 通信。
- 状态: 该项目目前维护不太活跃。它主要与 ActiveMQ Classic 配合使用。
CMS Client (ActiveMQ-CPP)
- 全称: C++ Messaging Service
- 本质: 它是一个原生的 C++ 消息 API,并非 JMS 的移植。它的设计更符合 C++ 的编程习惯和范式(例如,大量使用智能指针、STL 等)。
- 协议: 支持多种协议,包括 OpenWire(连接 Classic)和 Core Protocol(连接 Artemis,这是默认且推荐的方式)。
- 状态: 这是 官方推荐和主流的 C++ 客户端,特别是用于连接 ActiveMQ Artemis。它维护得更好,与 Artemis 的集成更紧密。
总结与对比
特性/项目 | ActiveMQ Classic | ActiveMQ Artemis |
---|---|---|
本质 | 传统的、成熟的消息代理 | 下一代、高性能、全新架构的消息代理 |
架构 | 阻塞式 I/O,线程 per-connection | 非阻塞 I/O (Netty),事件驱动,高性能 |
持久化 | KahaDB, JDBC | 高性能 Journal + JDBC |
协议支持 | 多协议(OpenWire, STOMP, AMQP, MQTT) | 多协议(原生无缝转换,Core, OpenWire, AMQP, MQTT, STOMP) |
C++ 客户端推荐 | NMS (Apache.NMS) - 已不推荐 | CMS (ActiveMQ-CPP) - 官方推荐 |
Web 控制台 | 功能较简单的老式控制台 | 功能强大的现代化控制台 (集成在 broker 中) |
推荐选择 | 维护旧系统或需要特定 Classic 特性的项目 | 所有新项目,以及对性能、扩展性有要求的场景 |
建议:
- 新项目选型: 毫不犹豫地选择 ActiveMQ Artemis。
- C++ 开发: 使用 ActiveMQ-CPP (CMS) 库来连接 Artemis(使用
tcp://
和 core 协议)或 Classic(使用tcp://
和 openwire 协议)。 - Java 开发: 使用标准的 JMS 2.0 API。Artemis 提供了高效的 JMS 客户端。
- 管理监控: Artemis 内置的控制台已经非常强大,对于高级监控,可以集成 Jolokia 和 Grafana/Prometheus。