我正在尝试运行Wildfly 18服务器的Apache Artemis中的MQTT接受器。
服务器正在运行时,我甚至可以将消息发送到已定义的主题(尽管它必须定义)。
最初,我必须将权限create-durable-queue="true"添加到安全性中,否则,一旦我尝试订阅该主题,服务器就会终止通信。
也就是说,我试图弄清楚如何在JMS端创建一个带有通配符的主题订阅,但我既找不到当前的文档,也找不到与此相关的任何其他信息。
要为用例提供一些背景知识:
我想使用Wildfly 18的内置Artemis服务器,并有一堆可以发布到/device/reader/SOMEID/temperature和类似主题的设备。
在我的EJB中,我想订阅主题/device/#,并获取该主题和所有子主题的所有消息。
我怎样才能做到这一点呢?
另外,当我在配置中的条目是
<jms-topic name="TestTopic" entries="java:/jms/topic/TestTopic" />
为什么MQTT的主题是jms/topic/TestTopic?我不喜欢在那里使用前缀。
发布于 2019-10-28 22:34:25
服务器正在运行时,我甚至可以向已定义的主题发送消息(尽管它必须定义)。
如果您在auto-create-addresses address-setting中使用true,那么当您向其发送消息或在其上创建订阅时,将自动为您创建主题(即地址)。
最初,我必须将创建持久队列=“true”权限添加到安全性中,否则,只要我尝试订阅该主题,服务器就会终止通信。
这是预期的,因为默认情况下未设置create-durable-queue权限。
如果希望JMS主题订阅者获得发送到特定地址集的所有消息,则只需在服务器配置或代码中的jms-topic定义中指定所需的通配符地址。您可以找到有关ActiveMQ Artemis here的最新文档,以及here使用它的示例。
为什么MQTT主题是jms/ topic /TestTopic?我不喜欢在那里使用前缀。
不幸的是,由于历史上的向后兼容性问题,前缀在Wildfly中不是可选的。此外,虽然嵌入式JMS实例在技术上可以为非ActiveMQ客户端提供服务,但是嵌入式代理实际上只是作为Java所需的JMS实现。如果您独立运行ActiveMQ Artemis,您将拥有更大的灵活性(即不使用前述前缀的能力)。
https://stackoverflow.com/questions/58591130
复制相似问题