Apache ActiveMQ Artemis 拥有一个强大且灵活的核心,为其他协议的实现提供了基础。每个协议实现都将特定协议的概念映射到这个核心上。

代理自带一个直接与核心交互的客户端实现。它使用所谓的“核心”API,并通过“核心”协议进行网络通信。

1. 支持的协议

代理具有可插拔的协议体系结构。协议插件以协议模块的形式提供。每个协议模块都包含在代理的类路径中,并在启动时由代理加载。代理自带 5 个协议模块。

1.1. AMQP

AMQP 是一个用于互操作消息传递的规范。它还定义了一种线格式,因此任何 AMQP 客户端都可以与任何支持 AMQP 的消息传递系统一起使用。AMQP 客户端在许多不同的编程语言中可用。

Apache ActiveMQ Artemis 实现AMQP 1.0规范。任何支持 1.0 规范的客户端都能够与 Apache ActiveMQ Artemis 交互。

有关更多详细信息,请参阅AMQP

1.2. MQTT

MQTT 是一种轻量级连接协议。它旨在在设备和网络受限的环境中运行。任何支持 3.1、3.1.1 或 5 规范的客户端都能够与 Apache ActiveMQ Artemis 交互。

有关更多详细信息,请参阅MQTT

1.3. STOMP

Stomp 是一种非常简单的文本协议,用于与消息传递系统进行互操作。它定义了一种线格式,因此理论上任何 Stomp 客户端都可以与任何支持 Stomp 的消息传递系统一起使用。Stomp 客户端在许多不同的编程语言中可用。任何支持 1.0、1.1 或 1.2 规范的客户端都能够与 Apache ActiveMQ Artemis 交互。

有关更多详细信息,请参阅Stomp

1.4. OpenWire

ActiveMQ Classic 定义了自己的线协议:OpenWire。为了支持 ActiveMQ “Classic” 客户端,Apache ActiveMQ Artemis 支持 OpenWire。任何 ActiveMQ 5.12.x 或更高版本都可以与 Apache ActiveMQ Artemis 一起使用。

有关更多详细信息,请参阅OpenWire

1.5. Core

ActiveMQ Classic 定义了自己的线协议:OpenWire。为了支持 ActiveMQ “Classic” 客户端,Apache ActiveMQ Artemis 支持 OpenWire。任何 ActiveMQ 5.12.x 或更高版本都可以与 Apache ActiveMQ Artemis 一起使用。

有关更多详细信息,请参阅Core

1.5.1. API 和其他接口

尽管 JMS 和 Jakarta Messaging 是标准化的 API,但它们没有定义网络协议。ActiveMQ Artemis JMS & Jakarta Messaging 客户端 是在核心协议之上实现的。我们还提供了一个客户端 JNDI 实现

2. 配置接收器

为了使用特定协议,必须配置传输并启用所需的协议。这里有一个关于配置传输的完整部分此处

ActiveMQ Artemis 发行版附带的默认配置中已定义了许多接收器,每个接收器都对应上述协议中的一个,另外还有一个支持所有协议的通用接收器。要启用特定接收器上的协议,只需将protocols url 参数添加到接收器 url 中,其中值为一个或多个协议(以逗号分隔)。如果protocols 参数从 url 中省略,则会启用**所有**协议。

  • 以下示例仅在端口 1883 上启用 MQTT

    <acceptors>
       <acceptor>tcp://127.0.0.1:1883?protocols=MQTT</acceptor>
    </acceptors>
  • 以下示例在端口 5672 上启用 MQTT 和 AMQP

    <acceptors>
       <acceptor>tcp://127.0.0.1:5672?protocols=MQTT,AMQP</acceptor>
    </acceptors>
  • 以下示例在61616上启用**所有**协议

    <acceptors>
       <acceptor>tcp://127.0.0.1:61616</acceptor>
    </acceptors>

以下是支持的协议及其在protocols url 参数中使用的对应值。

协议 protocols

Core(Artemis & HornetQ 原生)

CORE

OpenWire(5.x 原生)

OPENWIRE

AMQP

AMQP

MQTT

MQTT

STOMP

STOMP