Java Camel和MQTT路由
我正在从事一个项目,并决定使用Camel和ActiveMQ。我正在尝试使用Java和MQTT端点创建路由。在这条路线中,我还集成了一个处理器。这就是我的路线:Java Camel和MQTT路由,java,apache-camel,mqtt,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"); 据我所知,路由是
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 for enqueued和dequeued中的消息增加,即使我只pusblished了一条消息。此外,如果我关闭ActiveMQ,我会得到以下结果:
INFO | Waiting as there are still 1 inflight and pending exchanges to complete,
timeout in 7 seconds.
此外:
这些例外让我感到奇怪,交换没有完成,缺少了一些东西。我需要帮助 看看。需要注意的是,只有在我正确理解的情况下,这个组件才能用于消费消息
Note: The component currently only supports polling (consuming) feeds.
这很奇怪。我会进一步调查。这不一定是最好的答案,但是,它是有效的
from("mqtt:test?subscribeTopicName=zaq.avila.send")
.process(new RestProcessor())
.to("jms:topic:zaq.avila.receive");
据
MQTT消息被转换为JMS字节消息。相反,任何JMS消息的主体都会转换为字节缓冲区,作为MQTT消息的有效负载
我能够将mqtt消息发布到主题,应用处理器并将修改后的消息作为mqtt消息接收,即使指定的端点是JMS
如果有人能想到任何可能的失败,我将很高兴收到你的来信。在我看来,这样就不需要将消息发布为MQTT。Wow。真奇怪,我不知道我怎么会错过。它没有解释如果文档不支持发布消息,为什么文档会包含publishTopicName选项。这可以正常工作mqtt publish to->jms topic to->mqtt subscribe。但缺点是您失去了mqtt功能,如保留消息和qos。
from("mqtt:test?subscribeTopicName=zaq.avila.send")
.process(new RestProcessor())
.to("jms:topic:zaq.avila.receive");