jms - Wildfly 18、MQTT 和通配符订阅
问题描述
我正在尝试让 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
呢?我不喜欢在那里使用前缀。
解决方案
服务器正在运行,我什至可以将消息发送到定义的主题(尽管必须定义)。
如果您使用true
的auto-create-addresses
address-setting
是主题(即地址),则应该在您向其发送消息或在其上创建订阅时自动为您创建主题。
最初我必须将权限 create-durable-queue="true" 添加到安全性,否则,一旦我尝试订阅该主题,服务器就会终止通信。
这是预期的,因为create-durable-queue
默认情况下未设置权限。
如果您希望 JMS 主题订阅者将所有消息发送到特定地址集,则只需jms-topic
在服务器配置或代码中的定义中指定所需的通配符地址。您可以在此处找到有关 ActiveMQ Artemis 的有关此主题的最新文档以及在此处使用它的示例。
为什么 MQTT 主题然后是 jms/topic/TestTopic?我不喜欢在那里使用前缀。
不幸的是,由于历史向后兼容性问题,Wildfly 中的前缀不是可选的。此外,虽然嵌入式 ActiveMQ Artemis 实例在技术上可以为非 JMS 客户端提供服务,但嵌入式代理实际上只是作为 Java EE 要求的 JMS 实现。如果您独立运行 ActiveMQ Artemis,您将拥有更大的灵活性(即不使用上述前缀的能力)。
推荐阅读
- apostrophe-cms - Apostrophe CMS 中的非编辑者、经过身份验证的用户
- ios - Origin 视图控制器在呈现新景观视图控制器时的奇怪行为
- javascript - 修复响应式导航栏(非引导程序)
- mysql - MySQL基于条件的多重连接
- postgresql - 计算postgresql中按月汇总的年份之间的销售额差异
- python - 如何自动将注册期间指定的信息添加到“个人资料”?Django 2.1.5
- treeview - 当 codedui 无法识别树下的任何东西时该怎么办
- c# - C#表单应用动态添加元素定位
- android - Android Adapter onItemClick on RecyclerView 影响多个View项目
- spring - 如何从 !unit 配置文件中获取 junit 中的值?