如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 使用
How to Produce from MQTT and consume as MQTT and JMS in ActiveMQ
我有一个设置,其中消息作为 MQTT 生成到 ActiveMQ。
我有两个消费者,一个是 JMS,另一个是 MQTT。
当我将消息作为 JMS 消息发布到主题 "foo" 时,我在 JMS 和 MQTT 消费者处都收到消息,但是当我作为 MQTT 发布到同一主题时,我只收到消息在 MQTT 消费者上,JMS 消费者什么也没有收到。
在发布为 MQTT 以便能够作为 MQTT 和 JMS 使用时,我需要特别做些什么吗?
请帮忙。
更新:
JMS Consumer
JMS Producer
MQTT Publisher
MQTT Subscriber
activemq.xml
您的问题看起来是您的 JMS 消费者期望消息作为 TextMessage 到达,这在处理 MQTT 生成的消息时是错误的假设。
MQTT 消息是二进制的,没有内容类型信息或 headers 来定义负载。出于这个原因,代理将始终将它们解释为 BytesMessage 并按此发送它们。您将需要针对该事实进行编码并使用 BytesMessage,然后将有效负载作为字符串读出。
我有一个设置,其中消息作为 MQTT 生成到 ActiveMQ。 我有两个消费者,一个是 JMS,另一个是 MQTT。
当我将消息作为 JMS 消息发布到主题 "foo" 时,我在 JMS 和 MQTT 消费者处都收到消息,但是当我作为 MQTT 发布到同一主题时,我只收到消息在 MQTT 消费者上,JMS 消费者什么也没有收到。
在发布为 MQTT 以便能够作为 MQTT 和 JMS 使用时,我需要特别做些什么吗?
请帮忙。
更新:
JMS Consumer
JMS Producer
MQTT Publisher
MQTT Subscriber
activemq.xml
您的问题看起来是您的 JMS 消费者期望消息作为 TextMessage 到达,这在处理 MQTT 生成的消息时是错误的假设。
MQTT 消息是二进制的,没有内容类型信息或 headers 来定义负载。出于这个原因,代理将始终将它们解释为 BytesMessage 并按此发送它们。您将需要针对该事实进行编码并使用 BytesMessage,然后将有效负载作为字符串读出。