骆驼和MQTT路线

时间:2014-02-11 01:32:50

标签: java apache-camel mqtt

我正在开发一个项目,并决定使用Camel和ActiveMQ。我正在尝试使用Java和MQTT端点创建路由。在这条路线中,我还加入了一个处理器。这就是我的路线:

from("mqtt:test?subscribeTopicName=zaq.avila.send")
            //.process(new RestProcessor())
            .to("mqtt:test?publishTopicName=zaq.avila.receive");

根据我的理解,该路由消耗来自zaq / avila / send,应用处理器,然后将消息发布到zaq / avila / receive。 to()部分似乎没有发生,当我检查控制台时,我看到处理器执行但没有消息发布到zaq / avila / receive。此外,在Web控制台中,我看到zaq / avila / send中的消息为入队和出队递增,即使我只是建立了一条消息。另外,如果我关闭ActiveMQ,我会得到以下结果:

 INFO | Waiting as there are still 1 inflight and pending exchanges to complete,
 timeout in 7 seconds.

此外:

  WARN | Error occurred while shutting down service: Endpoint[mqtt://test?publish
 TopicName=zaq.avila.receive]. This exception will be ignored.
 java.lang.NullPointerException

这些例外让我想知道交换没有完成而且缺少某些东西。我需要帮助!

2 个答案:

答案 0 :(得分:1)

查看Camel MQTT component documentation。请注意,如果我理解正确,此组件只能用于消费消息。

Note: The component currently only supports polling (consuming) feeds.

这很奇怪。我会进一步调查。

答案 1 :(得分:1)

这可能不一定是最好的答案,但是,它有效。

from("mqtt:test?subscribeTopicName=zaq.avila.send")
        .process(new RestProcessor())
        .to("jms:topic:zaq.avila.receive");

根据ActiveMQ Doc

  

MQTT消息转换为JMS ByteMessage。相反,任何JMS消息的主体都将转换为字节缓冲区,成为MQTT消息的有效负载。

我能够向主题发布mqtt消息,应用处理器并将修改后的消息作为mqtt消息接收,即使指定的端点是JMS也是如此。

如果有人能想到任何可能的挫折,我很乐意收到你的回复。在我看来,这消除了将消息发布为MQTT的需要。