【问题标题】:Camel route sourced from seda is not routing to the Kafka destination endpoint源自 seda 的骆驼路由未路由到 Kafka 目标端点
【发布时间】:2017-05-19 22:29:49
【问题描述】:

我有一个简单的骆驼路线,它从 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。但没有成功。

任何帮助将不胜感激。

【问题讨论】:

  • 你用的是什么版本的骆驼
  • @ClausIbsen 我正在使用 Camel 2.19.0
  • 在生产者中使用 bridgeEndpoint 选项

标签: java apache-camel apache-kafka


【解决方案1】:

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

这只发生在 seda 路由上。与直达路线完美搭配

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多