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++)
  • 全称N MS (N ative M essaging Service)
  • 本质 : 它是一个 C++ 对 JMS API 的移植和实现。NMS 的目标是提供一个与 Java 中 JMS API 非常相似的编程模型给 C++ 开发者。
  • 协议 : 主要使用 OpenWire 协议与 ActiveMQ Classic 通信。
  • 状态 : 该项目目前维护不太活跃。它主要与 ActiveMQ Classic 配合使用。
CMS Client (ActiveMQ-CPP)
  • 全称C ++ M essaging 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 特性的项目 所有新项目,以及对性能、扩展性有要求的场景

建议:

  1. 新项目选型 : 毫不犹豫地选择 ActiveMQ Artemis
  2. C++ 开发 : 使用 ActiveMQ-CPP (CMS) 库来连接 Artemis(使用 tcp:// 和 core 协议)或 Classic(使用 tcp:// 和 openwire 协议)。
  3. Java 开发 : 使用标准的 JMS 2.0 API。Artemis 提供了高效的 JMS 客户端。
  4. 管理监控: Artemis 内置的控制台已经非常强大,对于高级监控,可以集成 Jolokia 和 Grafana/Prometheus。
相关推荐
百思可瑞教育21 小时前
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的全面对比分析
vue.js·分布式·rabbitmq·rocketmq·activemq·北京百思可瑞教育·百思可瑞教育
Zhang.jialei1 个月前
HiveMQ 2024.9 设计与开发文档
hive·物联网·activemq
学习HCIA的小白3 个月前
ActiveMQ
activemq
代码的余温4 个月前
ActiveMQ多消费者负载均衡优化指南
java·后端·负载均衡·activemq
计算机毕设定制辅导-无忧学长4 个月前
ActiveMQ 高级特性:延迟消息与优先级队列实战(一)
activemq
计算机毕设定制辅导-无忧学长4 个月前
ActiveMQ 高级特性:延迟消息与优先级队列实战(二)
activemq
计算机毕设定制辅导-无忧学长4 个月前
ActiveMQ 生产环境问题排查与调优指南(一)
activemq
计算机毕设定制辅导-无忧学长4 个月前
ActiveMQ 源码剖析:消息存储与通信协议实现(四)
activemq
计算机毕设定制辅导-无忧学长4 个月前
ActiveMQ 源码剖析:消息存储与通信协议实现(一)
activemq