本章介绍如何将 JMS 目的地映射到 Apache ActiveMQ Artemis 地址模型。如果您还没有阅读,请阅读关于 地址模型 的内容,因为它介绍了此处提到的概念。

1. JMS 主题

JMS 主题被实现为一个 地址,其中地址的名称与 JMS 主题的名称相同。

该 JMS 主题上的订阅被表示为在相应地址上的 多播 队列。队列的命名取决于订阅是否是持久的,以及通过 JMS API 提供的客户端 ID 和订阅名称。

通常每个队列只有一个消费者,但在使用 JMS 共享主题订阅时,一个队列上可以有多个消费者。因此,发送到 JMS 主题的任何消息都将被路由到绑定到相应地址的每个多播队列,然后分发到这些队列上的任何消费者(即 JMS 主题订阅者)。如果地址上没有队列,则消息将被简单地丢弃。

这有效地实现了 JMS 发布/订阅语义。

2. JMS 队列

类似地,JMS 队列被实现为一个 地址,其中地址的名称与 JMS 队列的名称相同。

但是,在相应地址上只有一个 单播 队列。此队列上的所有 JMS 消费者将共享队列中的消息。队列的名称与地址相同。

这有效地实现了 JMS 点对点语义。