如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费

Posted

技术标签:

【中文标题】如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费【英文标题】:How to Produce from MQTT and consume as MQTT and JMS in ActiveMQ 【发布时间】:2015-08-23 17:48:00 【问题描述】:

我有一个设置,其中消息作为 MQTT 生成到 ActiveMQ。 我有两个消费者,一个是 JMS,另一个是 MQTT。

当我将消息作为 JMS 消息发布到主题“foo”时,我在 JMS 和 MQTT 消费者处都接收到消息,但是当我在同一主题上作为 MQTT 发布时,我仅在 MQTT 消费者和JMS 消费者什么也没有收到。

在发布为 MQTT 时,我是否需要专门做一些事情才能像 MQTT 和 JMS 一样使用。

请帮忙。

更新:

JMS ConsumerJMS ProducerMQTT PublisherMQTT Subscriberactivemq.xml

【问题讨论】:

您应该检查 MQTT 客户端用于发布到所有的主题名称是否会导致您的 JMS 客户端订阅的内容。 我将主题名称用作 JMS 和 MQTT 发布者和订阅者的“foo”。主题名称对我来说似乎不是问题。 我认为任何人都无法在不查看 ActiveMQ WebConsole 的代码和视图的情况下做出回答,以了解正在创建哪些目标。还可以使用最新的 ActiveMQ 版本来修复所有错误。 嗨,我已经添加了代码和截图。我正在使用 ActiveMQ 5.11.1 【参考方案1】:

您的问题看起来是您的 JMS 使用者期望消息以 TextMessage 形式到达,这是在处理 MQTT 生成的消息时的错误假设。

MQTT 消息是二进制的,没有内容类型信息或标头来定义有效负载。出于这个原因,代理将始终将它们解释为 BytesMessage 并按原样发送它们。您将需要针对该事实编写代码并同时使用 BytesMessage,然后将有效负载作为字符串读取。

【讨论】:

以上是关于如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费的主要内容,如果未能解决你的问题,请参考以下文章

Apache Activemq 和 Mqtt

activemq 5.10.0 支持的最大 mqtt 连接数是多少

如何让我的 ActiveMQ 代理删除离线持久订阅者

如何通过javascript 使用 MQTT

ActiveMQ 中是不是支持 MQTT 队列?

Android MQTT 客户端无法重新连接到 ActiveMQ