2016-04-14 23 views
0

私は次のライブラリを使用しています:compile 'net.spy:spymemcached:2.12.0'spymemcached:memcachedが正常に接続されたかどうかはどうすればわかりますか?

私はこれを行う場合memcachedclientが正常に接続されていないのであれば、それは私にエラーを与える:

mc.get(myvariable) 

私は私の前に、接続状態を確認したいですエラーを防ぐにはmc.get()に電話してください。 mc.getConnection().connectionsStatus()しかし、それはそれは言う文字列を返すんすべて:

私は多分私はこのチェックできると思っていた

Connection Status { pub-memcache-XXX active: false, authed: false, last read: 7 ms ago } 

を私はそれだけでSUCCESSFAILUREを返すだろうと思ったが、それは文字列を返します。

メソッドのドキュメントはここにある:私は、私はactive変数を解析して、それをチェックすることができます知っているがありません

/** 
    * Construct a String containing information about all nodes and their state. 
    * 
    * @return a stringified representation of the connection status. 
    */ 
    public String connectionsStatus() { 
    StringBuilder connStatus = new StringBuilder(); 
    connStatus.append("Connection Status {"); 
    for (MemcachedNode node : locator.getAll()) { 
     connStatus 
     .append(" ") 
     .append(node.getSocketAddress()) 
     .append(" active: ") 
     .append(node.isActive()) 
     .append(", authed: ") 
     .append(node.isAuthenticated()) 
     .append(MessageFormat.format(", last read: {0} ms ago", 
      node.lastReadDelta())); 
    } 
    connStatus.append(" }"); 
    return connStatus.toString(); 
    } 

https://github.com/couchbase/spymemcached/blob/master/src/main/java/net/spy/memcached/MemcachedConnection.java

私は、下記の関連するメソッドをコピーしましたgetを呼び出す前にspymemcachedが接続されているかどうかを確認する簡単な方法はありますか?

答えて

1

変数activeを解析する代わりに、MemcachedClientMemcachedNodeオブジェクトにアクセスして、ノードがアクティブかどうかを直接確認することができます。下図のようにあなたはそれを実装することができます:

for (MemcachedNode node : mc.getNodeLocator().getAll()) { 
     if (!node.isActive()) { 
      System.out.println("Failed to connect to Memcached server"); 
      mc.shutdown(); 
      //Handle accordingly 
     } 
} 

あなたはあなたのプログラムがハングアップする原因となるサーバーに再接続し続けmc.shutdown()MemcachedClientとして使用することができます。

関連する問題