2017-11-13 3 views
0

私はRouteBuilderのソースとしてKafkaを設定しています。私の目標は、カフカの切断問題を処理することです。私のRouteBuilderは次のとおりです:Camel:Kafkaの間違ったIPを検出する

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

ルーティングするメッセージがあるときにRouteBuilderのOnExceptionがトリガーされますが、カフカクラスターに接続できないため、それを持っていません。そのため、例外処理が表示されません。

+0

しかし、私は接続がないことをどのように検出できますか? – user2045777

+0

プロデューサーを使って、カフカに何かを最初に送ろうとするかもしれません。 – Oscerd

+0

私はいくつかの進歩を遂げ、エンドポイントでsetBridgeErrorHandlerを使用する必要があることを知りました(http://static.javadoc.io/org.apache.camel/camel-core/2.18.0/org/apache/camel/implを参照)。 /DefaultEndpoint.html#setBridgeErrorHandler-boolean-) は、例えば、修飾された - https://github.com/apache/camel/blob/master/examples/camel-example-kafka/src/main/java/org /apache/camel/example/kafka/MessageConsumerClient.java camelContext.start()の直後のコードに と が追加されました。 – user2045777