クラスター内のマシンの1つがダウンした場合に、他のマシンの使用を開始するように、JavaアプリからRiakを使用しようとしています。私はC#でCorrugated Ironドライバーを使用してこれを行うことができましたが、Javaで機能させることができないようです。
PBClusterConfigで複数のRiakマシンを指定していること、つまり、クライアントがクラスター内のすべてのマシンを「認識している」ことを確認しました。
私はこのように設定しましたPBClusterConfig
:
BClusterConfig config = new PBClusterConfig(maxConnections);
for(RiakServerConfig server : servers) {
PBClientConfig.Builder builder = new PBClientConfig.Builder();
PBClientConfig serverConfig = builder
.withHost(server.getHostname())
.withPort(server.getPort())
.build();
config.addClient(serverConfig);
}
次に、私の実際の操作(読み取りと書き込みのみ)は次のようになります。
client
.createBucket(bucket)
.withRetrier(DefaultRetrier.attempts(3))
.execute()
.store(key, value)
.withRetrier(DefaultRetrier.attempts(3))
.execute();
riakクラスターに問題がない場合、このコードは機能しますが、マシンの1つがダウンすると、数秒後に次のエラーが発生しますcom.basho.riak.client.RiakRetryFailedException: com.basho.riak.pbc.AcquireConnectionTimeoutException: timeout acquiring connection permit from pool
。
これを機能させる方法について何かアイデアはありますか?