Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Camel和MQTT路由_Java_Apache Camel_Mqtt - Fatal编程技术网

Java Camel和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"); 据我所知,路由是

我正在从事一个项目,并决定使用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 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");