我正在尝试整合Kafka + Camel而无法弄清楚 - 如何使用消息。
我正在尝试使用Apache Camel为Apache Kafka中的主题创建一个使用者。 我使用的是Apache Camel 2.18.2和Kafka 2.10以及JDK 1.8。
以下是为名为SyncInOut的主题生成消息的程序。
final String toKafka= "kafka:localhost:9092?topic=SyncInOut&groupId=group1";
final String fromKafka = "kafka:localhost:9092?topic=SyncInOut&groupId=group1&autoOffsetReset=earliest&consumersCount=1";
final String TEST_PAYLOAD = "Sync Payload InOut!";
CamelContext camelContext = new DefaultCamelContext();
ProducerTemplate template = camelContext.createProducerTemplate();
Exchange exchange = template.send(toKafka, ExchangePattern.InOut, new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody(TEST_PAYLOAD);
}
});
在执行上面的代码时,我能够使用ProducerTemplate生成消息,并且消息已成功推送到SyncInOut。但我无法消费这条消息。在这里,我正在添加一条新路线并试图消费。
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
PropertiesComponent pc = getContext().getComponent("properties", PropertiesComponent.class);
pc.setLocation("classpath:application.properties");
log.info("About to start route: Kafka Server -> Log ");
from(fromKafka)
.process(new Processor() {
@Override
public void process(Exchange exchange)
throws Exception {
String messageKey = "";
if (exchange.getIn() != null) {
Message message = exchange.getIn();
Integer partitionId = (Integer) message
.getHeader(KafkaConstants.PARTITION);
String topicName = (String) message
.getHeader(KafkaConstants.TOPIC);
if (message.getHeader(KafkaConstants.KEY) != null)
messageKey = (String) message
.getHeader(KafkaConstants.KEY);
Object data = message.getBody();
System.out.println("topicName :: "
+ topicName + " partitionId :: "
+ partitionId + " messageKey :: "
+ messageKey + " message :: "
+ data + "\n");
}
}
}).to("log:input");
}
});
camelContext.start();
上述消费者路线无法按预期工作。理想情况下,消耗的消息应该打印出来,但似乎没有任何事情发生。它似乎没有被触发那种方式。所以,我尝试使用ConsumerTemplate消费消息,如下所示,但这也没有用。
Exchange exchangeConsumer = consumerTemplate.receive(fromKafka);
System.out.println("Body is : "+exchangeConsumer.getOut().getBody().toString());
上述行永远不会完成。我无法弄清楚如何使用Apache Camel从Kafka主题消费消息。我从官方文档中找不到多少帮助。任何其他帮助将不胜感激。