我有关于 JMS 的问题。我一直在查看一些博客,其中展示了队列侦听器如何接收发送主题消息。据我所知,甚至有可能只有订阅特定主题的客户端才能收到发布的消息。
因此,如果您发布到某个主题,您希望使用队列中的消息。我假设您使用 ActiveMQ,因为您添加了该标签。
这样设置的主要原因是能够对消费者的多个集群节点进行负载均衡。普通持久订阅在 JMS 1.x 中不允许这样做。我猜你的情况很相似。
在通用 JMS 中,这是不可能的。然而,在 JMS 2.0 中,持久订阅可以进行负载平衡,因此工作方式有点像队列。并非所有 JMS 代理都实现 JMS 2.0。 ActiveMQ 没有实现 JMS 2.0,但 ActiveMQ Artemis 实现了。
ActiveMQ 通过一个称为虚拟主题的概念来实现这一点。使用 Virtual Topics 您可以为主题指定一个特定名称,例如 VirtualTopic.MyTopic 会将所有已发布的消息转发到任何与 Consumer.MyConsumer.VirtualTopic.MyTopic 匹配的已创建队列。
主题名称示例:
队列名称示例: