Klearchos Klearchou created CAMEL-13878:
-------------------------------------------

             Summary: Message is forwarded to the wrong Kafka Topic
                 Key: CAMEL-13878
                 URL: https://issues.apache.org/jira/browse/CAMEL-13878
             Project: Camel
          Issue Type: Bug
          Components: camel-kafka
    Affects Versions: 2.24.1
            Reporter: Klearchos Klearchou


I have 3 Apache Spring Boot applications and 3 topics.

Let's call them Topic A, B and C and the Spring Boot applications FirstApp, 
SecondApp and ThridApp. I use Java DSL for the Kafka configuration.

The FirstApp creates a message to Kafka Topic A.

The SecondApp reads from Topic A makes transformations and passes each value to 
Topic B.

The ThirdApp reads from Topic B and after transformations tries to pass it to 
Topic C.

At this point through the debugger I saw that at the class  
org.apache.camel.component.kafka.KafkaProducer and at the method 

protected Iterator<ProducerRecord> createRecorder(Exchange exchange) something 
strange is happening.
The headerTopic (line 140) from the following line:

String headerTopic = exchange.getIn().getHeader(KafkaConstants.TOPIC, 
String.class);

contains the topic A! The correct topic that I have clearly set through the 
Java DSL can be found under the line 137: 

String topic = endpoint.getConfiguration().getTopic();

As a workaround I have entered the following line inside a processor at the 
SecondProgram:

exchange.getIn().setHeader(KafkaConstants.TOPIC, null);

This has the side-effect that the headerTopic at line 140 is empty and thus the 
correct topic from line 137 is used.

I believe that since I have clearly set the destination topic at the 
ThirdProgram to Topic C then Apache Camel should not override this with Topic A.

It looks like a bug since from the method description I understand that we try 
to avoid circular loops.

 



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to