我正在开发一个项目,并决定使用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
这些例外让我想知道交换没有完成而且缺少某些东西。我需要帮助!
答案 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");
MQTT消息转换为JMS ByteMessage。相反,任何JMS消息的主体都将转换为字节缓冲区,成为MQTT消息的有效负载。
我能够向主题发布mqtt消息,应用处理器并将修改后的消息作为mqtt消息接收,即使指定的端点是JMS也是如此。
如果有人能想到任何可能的挫折,我很乐意收到你的回复。在我看来,这消除了将消息发布为MQTT的需要。