我有一个简单的骆驼路线,它从卡夫卡话题中消耗。是否有一些处理并写回另一个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。但没有成功。
非常感谢任何帮助。
答案 0 :(得分:0)
我认为您需要将交换模式设置为“仅限于”。 像这样:
.to(ExchangePattern.InOnly,"seda:myseda")
答案 1 :(得分:0)
如果您的kafka消费者和生产者主题不同。 Apache骆驼默认情况下也为生产者保留使用者头。为避免这种情况,请使用update kafka头主题。我们可以使用生产者的bridgeEndpoint选项吗?如果该选项为true,则KafkaProducer将忽略入站消息的KafkaConstants.TOPIC标头设置。或者,您可以直接为生产者设置KafkaConstants.TOPIC标头。
这仅适用于色达路线。与直接路线完美配合