【问题标题】:Can the dot/period be used in the topic name(destination) of ActiveMQ by MQTTMQTT可以在ActiveMQ的主题名称(目的地)中使用点/句点吗
【发布时间】:2019-05-13 19:23:33
【问题描述】:

我们正在尝试通过 ActiveMQ 5.15.8 上的 MQTT 客户端 MQTT.fx 订阅名为 message/abc.com/broadcast 的主题。但是,ActiveMQ 控制台显示订阅的主题是message.abc/com.broadcast

我们看到 MQTT 斜线分隔符将被转换为 ActiveMQ 中的点。但是为什么 ActiveMQ 也将点转换为斜线呢?我们希望有一个主题是message.abc.com.broadcast 用于订阅和发布。

我们尝试了ActiveMQ的destinationPathSeparatorPlugin如下。

<plugins>   
        <destinationPathSeparatorPlugin pathSeparator="/" />
</plugins>

启用此插件后,message/abc.com/broadcast 的订阅将变为message.abc.com.broadcast,如 ActiveMQ 控制台所示。但是,当我们向message/abc.com/broadcast, 发布消息时,订阅者将不会收到任何消息。从控制台,我们可以看到消费者在那里(1 个消费者),并且消息已经入队和出队。

MQTT如何在ActiveMQ的主题名称中使用点/句点?

谢谢

【问题讨论】:

    标签: jms activemq mqtt message-queue jms-topic


    【解决方案1】:

    您正在混合协议。 ActiveMQ 兼容多种协议,如 MQTT、Stomp 等... 所以ActiveMQ根据对方处理自己的协议。

    如果您使用 MQTT,则创建主题时使用“/”作为分隔符,“+”表示任何匹配项,“#”表示任何后续匹配项。

    在 Active 中,此通配符更改为 '.'用于分隔符,'*' 用于任何匹配,'>' 用于任何后续匹配。 建议尽量避免在任何主题或队列名称中使用所有这些通配符。

    因此,如果您想订阅“counts/customers”,在控制台中会显示:“counts.customers”

    接下来会这样:

    MQTT ActiveMQ

    • "counts/customers" "counts.customers"
    • "counts/#" "counts.*"
    • "counts/+/#" "counts.*.>"
    • "counts/+/region" "counts.*.region"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多