2017-04-06 18 views
0

私は現在、Javaで弾性検索を使用している小さなプロジェクトを設定していますが、ElasticSearchClusterがダウンしているときに正常に 'ConnectTransportException'を処理する方法を解明しようとしています。Java ElasticSearch ConnectTransportExceptionを処理する/処理する方法

private TransportClient buildClient() { 
    TransportClient client = null; 
    try { 
     client = new PreBuiltTransportClient(Settings.EMPTY) 
      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 
    } catch(UnknownHostException ex) {    
     logger.error("Unknown host {}: {}", "localhost", ex.getMessage()); 
    } 
    return client; 
} 

このコードは正常に動作します。私のElasticSearchクラスタが稼働していないとき、私はクライアントがそれに接続して適切なメッセージを記録してそれを適切に処理できなかったかどうかを知りたいと思っています。私は、エラーをキャッチ、単にConnectTransportExceptionはないキャッチ別のcatchブロックを追加することによって、優雅にこれを処理できるようにしたい

org.elasticsearch.transport.ConnectTransportException: [][127.0.0.1:9300] connect_timeout[30s] 
    at org.elasticsearch.transport.netty4.Netty4Transport.connectToChannels(Netty4Transport.java:370) ~[transport-netty4-client-5.3.0.jar:5.3.0] 
    at org.elasticsearch.transport.TcpTransport.openConnection(TcpTransport.java:495) ~[elasticsearch-5.3.0.jar:5.3.0] 
    at org.elasticsearch.transport.TcpTransport.connectToNode(TcpTransport.java:460) ~[elasticsearch-5.3.0.jar:5.3.0] 
    at org.elasticsearch.transport.TransportService.connectToNode(TransportService.java:314) ~[elasticsearch-5.3.0.jar:5.3.0] 
    at org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler.doSample(TransportClientNodesService.java:408) [elasticsearch-5.3.0.jar:5.3.0] 
    at org.elasticsearch.client.transport.TransportClientNodesService$NodeSampler.sample(TransportClientNodesService.java:354) [elasticsearch-5.3.0.jar:5.3.0] 
    at org.elasticsearch.client.transport.TransportClientNodesService.addTransportAddresses(TransportClientNodesService.java:195) [elasticsearch-5.3.0.jar:5.3.0] 
    at org.elasticsearch.client.transport.TransportClient.addTransportAddress(TransportClient.java:322) [elasticsearch-5.3.0.jar:5.3.0] 
    at elk.aggregator.ElasticClient.buildClient(ElasticClient.java:72) [classes/:?] 
    at elk.aggregator.ElasticClient.<init>(ElasticClient.java:62) [classes/:?] 
    at elk.aggregator.ElasticClient.getInstance(ElasticClient.java:55) [classes/:?] 
    at elk.aggregator.App.main(App.java:9) [classes/:?] 
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:9300 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.8.0_111] 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[?:1.8.0_111] 
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:346) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final] 
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final] 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:630) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final] 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:527) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final] 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:481) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final] 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:441) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final] 
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) ~[netty-common-4.1.7.Final.jar:4.1.7.Final] 
    at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_111] 

:クライアントがクラスタに接続できないとき

は現在、私はこのエラーを取得しますうまくいかない。

どうすればいいですか?

答えて

0

あなたは、コードを区切るとホストを取得し、トランスポート・クライアントを作成するために扱うことができ、それは以下のように例外の詳細は明らかであろう。

private boolean checkHostAvailability(String host, int port){ 
bool success = true; 
try { 
    (new Socket(host, port)).close(); 
} catch (UnknownHostException e) { 
    success = false; 
logger.error("Unknown host {}: {}", host, e.getMessage()); 
} catch (IOException e) { 
    success = false; 
logger.error("Service not running host {}: {}, {}", host, port, e.getMessage()); 
} 

retrun success; 
} 

private TransportClient buildClient() { 
String host = "localhost"; 
int port = 9300; 
if(checkHostAvailability(host,port){ 

    TransportClient client = null; 
    try { 
     client = new PreBuiltTransportClient(Settings.EMPTY) 
      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), port)); 
    } catch(Exception ex) {    

    } 
    return client; 
} 

} 
関連する問題