Apache ActiveMQ Artemis 核心简单地设计为一组普通 Java 对象 (POJO) - 我们希望你喜欢它的简洁设计。

每个 Apache ActiveMQ Artemis 服务器都有自己的超高性能持久日志,用于消息和其他持久性操作。

使用高性能日志可以实现极高的持久性消息性能,这是使用关系数据库进行持久性无法实现的(尽管在必要时 JDBC 仍然是一个选项)。

Apache ActiveMQ Artemis 客户端(可能位于不同的物理机器上)与 Apache ActiveMQ Artemis 代理进行交互。Apache ActiveMQ Artemis 目前为客户端端的通信提供了三种 API 实现。

  1. 核心客户端 API。这是一个简单直观的 Java API,与 Artemis 内部核心保持一致。允许对代理对象进行更多控制(例如直接创建地址和队列)。核心 API 还提供了一套完整的通信功能,而无需 JMS 的某些复杂性。

  2. JMS 2.0 客户端 API。标准 JMS API 可在客户端使用。该客户端还符合 Jakarta Messaging 2.0 规范。

  3. Jakarta Messaging 3.0 客户端 API。这与 JMS 2.0 API 本质上相同。唯一的区别是包名使用 `jakarta` 而不是 `javax`。这种差异是由于从 Oracle 的 Java EE 迁移到 Eclipse 的 Jakarta EE 所致。

Apache ActiveMQ Artemis 还提供服务器上的不同协议实现,因此您可以使用这些协议的相应客户端。

  • AMQP

  • OpenWire

  • MQTT

  • STOMP

  • HornetQ(用于与 HornetQ 客户端一起使用)。

  • 核心(Artemis 核心协议)

JMS 语义由客户端的 JMS 外观层实现。

Apache ActiveMQ Artemis 代理不使用 JMS,实际上它对 JMS 一无所知,它是一个与协议无关的消息服务器,旨在与多种不同协议一起使用。

当用户在客户端使用 JMS API 时,所有 JMS 交互都会被转换为对 Apache ActiveMQ Artemis 核心客户端 API 的操作,然后再通过核心协议传输到网络。

代理始终只处理核心 API 交互。

1. 独立代理

正常的独立消息代理配置包括一个核心消息代理和一些协议管理器,它们提供对前面提到的各种协议的支持。

独立代理配置使用 picocli 来启动代理。

有关服务器配置文件的更多信息,请参阅 服务器配置

2. 嵌入式代理

Apache ActiveMQ Artemis 核心被设计为一组简单的 POJO,因此,如果您有一个应用程序需要内部的通信功能,但不想将其公开为 Apache ActiveMQ Artemis 代理,您可以直接在自己的应用程序中实例化和嵌入代理。

阅读有关 嵌入 Apache ActiveMQ Artemis 的更多信息。

3. 与 Java/Jakarta EE 应用服务器集成

Apache ActiveMQ Artemis 提供了自己的功能齐全的 Java 连接器体系结构 (JCA) 适配器,使其能够轻松地集成到任何符合 Java/Jakarta EE(以下简称“EE”)的应用服务器或 Servlet 引擎中。

EE 应用服务器提供消息驱动 Bean (MDB),这是一种特殊类型的企业 Java Bean (EJB),可以处理来自 JMS 系统或邮件系统等源的消息。

MDB 最常见的用途可能是从 JMS 消息系统中消费消息。

根据 EE 规范,应用服务器使用 JCA 适配器与 JMS 消息系统集成,以便它可以为 MDB 消费消息。

但是,JCA 适配器不仅被 EE 应用服务器用于通过 MDB 消费消息,它还在向 JMS 消息系统发送消息时使用,例如从 EJB 或 Servlet 内部发送消息。

当从 EE 应用服务器内部与 JMS 消息系统集成时,始终建议通过 JCA 适配器执行此操作。事实上,根据 EE 规范,直接与 JMS 消息系统通信而不使用 JCA 是非法的。

应用服务器的 JCA 服务提供了额外的功能,例如连接池和自动事务注册,这些功能在使用通信时是可取的,例如从 EJB 内部使用通信。可以从 EJB、MDB 或 Servlet 直接与 JMS 消息系统通信,而不必经过 JCA 适配器,但这不建议这样做,因为您将无法利用 JCA 功能,例如 JMS 会话缓存,这会导致性能低下。

请注意,EJB 会话或实体 bean 与消息驱动 bean 之间的所有通信都通过适配器进行,而不是直接与 Apache ActiveMQ Artemis 进行通信。

带禁止符号的大箭头显示了一个 EJB 会话 Bean 直接与 Apache ActiveMQ Artemis 服务器通信。不建议这样做,因为您很可能最终每次想要从 EJB 进行交互时都会创建一个新的连接和会话,这是一种反模式。