activemq-artemis - 如何查找多播队列?
问题描述
配置了以下主题/队列broker.xml
:
<address name="Topic1">
<multicast>
<queue name="Queue1"/>
<queue name="Queue2"/>
</multicast>
</address>
如何为 Queue1/Queue2 创建生产者以发送消息?我正在使用 ActiveMQ Artemis 2.6.3。
使用以下方式我正在创建连接工厂、连接和队列查找
Hashtable<String, Object> properties = new Hashtable<>();
properties.put("connectionFactory.ConnectionFactory", (tcp://localhost:61618,tcp://localhost:61616)?ha=true&retryInterval=3000&reconnectAttempts=-1&initialConnectAttempts=10&maxRetryInterval=3000&clientFailureCheckPeriod=1000);
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
InitialContext jndiContext = new InitialContext(properties);
ConnectionFactory connFactory = (ConnectionFactory) jndiContext.lookup(connectionFactory);
Connection connection = connFactory.createConnection(userName, password);
Session session = connection.createSession(true,javax.jms.Session.AUTO_ACKNOWLEDGE);
//Using following way looking up Multicast Queue2 on Address Topic1
Destination dest = new ActiveMQTopic("Topic1::Queue2");
MessageProducer producer = session.createProducer(dest);
producer.send(message, Message.DEFAULT_DELIVERY_MODE, Message.DEFAULT_PRIORITY, msgTTL);
完成上述代码更改并尝试发送消息后,消息将不会发送到队列“Queue2”
解决方案
通常,您希望根据需要选择正确的路由类型。选择是:
- anycast:提供点对点语义(例如,JMS 队列);发送到该地址的消息仅路由到一个任播队列
- 多播:提供发布-订阅语义(例如 JMS 主题);发送到该地址的消息被路由到所有多播队列
您有一个以Topic
2 个多播队列命名的地址 - Queue1
& Queue2
。因此,发送到的消息Topic
将同时发送到Queue1
& Queue2
。如果您只想将消息发送到一个队列,您可能会考虑使用不同的配置(例如,带有任播队列的地址)。
但是,如果您发现出于某种原因确实需要现有配置,那么您可以通过语法使用完全限定的队列名称(即 FQQN)发送消息<address>::<queue>
。我看到您已经在尝试这样做,例如:
Destination dest = new ActiveMQTopic("Topic1::Queue2");
但是,您使用的 ActiveMQ Artemis 版本不支持生产者的 FQQN。要使用此功能,我建议您至少升级到2.7.0 或理想情况下升级到最新版本 2.17.0。
推荐阅读
- reactjs - url 更改但视图没有更改 - 使用 BrowserRouter , npm run build , apache 服务器
- python - Python telnet 脚本循环
- php - 如何使用php重定向到存储在数据库中的另一个链接?
- python - AttributeError:“pygame.math.Vector2”对象没有属性
- c++ - 什么可能导致 c / cpp 文件中的编译指示一次
- javascript - 带有溢出的 div 内的 Js/CSS 图像:滚动防止滚动?
- c - 在 AVR 定时器编程中定义 ISR 与检查 TIFR 对应位
- javascript - 如何运行 ExpressJS 应用程序
- node.js - 多个用户使用相同功能时Firebase云功能截止日期错误
- javascript - 如何在 React Native 中动态创建多个 Refs