我正在尝试从 ActiveMQ Classic 迁移到 ActiveMQ Artemis,并且我在 Classic 中设置了双工 TCP 连接器。
我尝试设置联合配置,并且发现多播地址已正确中继。我没有看到任播地址被发送副本。我可以理解为什么考虑到选播的定义,这可能是预期的,但我希望能够重现与经典中相同的语义(其中我有一个转发其所有消息的经典队列)。
为了更清楚起见,我有两个代理,A 和 B,并且代理 B(辅助)配置了 A 的上游,以及 A 的下游和 B 的上游引用。我有一个匹配所有地址的地址策略这。代理 A 没有联合配置。
我观察到在 A 上创建的多播地址似乎在 B 上复制,这表明从 B 到 A 的上游似乎有效。但是任播(创建的 JMS 队列而不是主题)似乎没有在 B 上创建。我希望这能像 Classic 中匹配所有队列/主题的双工一样工作。
我的期望是,发送到代理 A 队列的每条消息都会被代理 B 上按名称订阅同一队列的人接收。换句话说,我希望通过在 A 上生成并在 B 上消费,我将获得相同的消息,就好像我在 A 上消费。我实际上希望 A 上发布的任何消息都转发到 B,反之亦然。
我看到文档指出:
联合地址可以将从上游地址发布的消息复制到本地地址。nb 仅多播地址支持此功能。
您引用的文档专门指的是联合将发送到一个代理上的多播地址的消息复制或复制到其他联合代理上的相同多播地址的能力。通过这种方式,您可以在整个联合代理网络中获取发布/订阅(即 JMS 主题)语义。
此特定行为不适用于任播地址,因为它们遵循点对点(即 JMS 队列)语义。JMS 队列上的所有使用者共享(即竞争)该队列上的消息。将这些消息复制或复制到其他联合节点将破坏基本的传递语义。
但是,通过联合将消息从一个代理中继或转发到另一个代理将适用于选播地址,但这与复制或复制这些消息不同。消息的转发基于消费者的需求。
另外,值得注意的是,JMS 客户端不像订阅主题那样订阅队列。他们只是创建一个消费者。