来自seda的Camel路由未路由到Kafka目标端点

时间:2017-05-19 22:29:50

标签: java apache-camel apache-kafka

我有一个简单的骆驼路线,它从卡夫卡话题中消耗。是否有一些处理并写回另一个kafka主题。

我需要在两者之间进行一些处理。我在路线中使用了seda,这样kafka消费者就不会因处理而受阻。

但是在处理之后,Camel将消息路由回源kafka端点而不是目标端点。

from("kafka:<source endpoint details>")
            .routeId("FromKafka")
            .log("@@@@@@@@:  ${body}")
            .to("seda:myseda?waitForTaskToComplete=Never");`

from("seda:myseda")
            .routeId("sedaRoute")
            .process(myprocessor)
            .to("kafka:<destination endpoint details>"

输出有效负载再次放入源kafka主题中。如果我只是直接替换seda,它就可以正常工作。

from("kafka:<source endpoint details>")
            .routeId("FromKafka")
            .log("@@@@@@@@:  ${body}")
            .to("direct:mydirect");`

from("direct:mydirect")
            .routeId("sedaRoute")
            .process(myprocessor)
            .to("kafka:<destination endpoint details>"

我怀疑Kafka可能是一个请求 - 回复交换,并且响应被返回给源端点。因此尝试将“ waitForTaskToComplete = Never ”添加到seda。但没有成功。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为您需要将交换模式设置为“仅限于”。 像这样:

.to(ExchangePattern.InOnly,"seda:myseda")

答案 1 :(得分:0)

如果您的kafka消费者和生产者主题不同。 Apache骆驼默认情况下也为生产者保留使用者头。为避免这种情况,请使用update kafka头主题。我们可以使用生产者的bridgeEndpoint选项吗?如果该选项为true,则KafkaProducer将忽略入站消息的KafkaConstants.TOPIC标头设置。或者,您可以直接为生产者设置KafkaConstants.TOPIC标头。

这仅适用于色达路线。与直接路线完美配合