我正在将Kafka配置为我的RouteBuilder中的源。我的目标是处理Kafka断开连接问题。我的RouteBuilder如下:
new RouteBuilder() {
public void configure() {
onException(Exception.class).process(exchange -> {
final Exception exception = exchange.getException();
logger.error(exception.getMessage());
// will do more processing here
});
from(String.format("kafka:%s?brokers=%s:%s", topicName, host, port)).bean(getMyService(), "myMethod")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
// some more processing
}
});
}
};
我提供了错误的主机和端口,并且预计会看到异常。但是,日志中没有异常,并且不会调用onException处理。 知道我做错了吗?
通过在本地运行https://github.com/apache/camel/blob/master/examples/camel-example-kafka/src/main/java/org/apache/camel/example/kafka/MessageConsumerClient.java而不运行任何Kafka服务器,可以重现类似的问题。这样做会导致不断的消息流:
Connection to node -1 could not be established. Broker may not be available.
有没有办法抛出异常? 任何帮助将不胜感激。
答案 0 :(得分:0)
当您有路由消息时,将触发RouteBuilder中的OnException,但由于您无法连接到Kafka群集,因此您没有。这就是你没有看到异常处理的原因。
答案 1 :(得分:0)
这只是一个很好的例子,Apache Camel非常棘手。我正在一个具有Apache Camel Kafka的项目中,我看到它的设计有多么糟糕。每个Kafka参数都有对应的Camel URL查询参数。如果Kafka引入了新的配置参数,而Apache Camel没有更新以获得新的查询参数怎么办?这样就根本无法使用此Kafka参数!太疯狂了。
这种Kafka配置参数的示例是在Kafka 2.1中引入的client.dns.lookup
(我需要将其设置为'use_all_dns_ips')。没有Apache Camel URL query-param来设置它!
解决方案:用Spring Kafka替换Apache Camel Kafka。