Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我必须如何使用Java API来促进故障切换?_Java_Api_Riak - Fatal编程技术网

我必须如何使用Java API来促进故障切换?

我必须如何使用Java API来促进故障切换?,java,api,riak,Java,Api,Riak,我试图从java应用程序中使用Riak,如果集群中的一台机器出现故障,它就会开始使用其他机器。我用C#中的瓦楞铁驱动程序实现了这一点,但在java中似乎无法实现 我已经确保在PBClusterConfig中指定了多台Riak机器,即客户机“知道”集群中的所有机器 我这样设置PBClusterConfig: BClusterConfig config = new PBClusterConfig(maxConnections); for(RiakServerConfig server : serve

我试图从java应用程序中使用Riak,如果集群中的一台机器出现故障,它就会开始使用其他机器。我用C#中的瓦楞铁驱动程序实现了这一点,但在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();
然后,我的实际操作(仅读写)如下所示:

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集群正常时,此代码正常工作,但当其中一台机器停机时,几秒钟后我会出现以下错误:
com.basho.riak.client.RiakRetryFailedException:com.basho.riak.pbc.AcquireConnectionTimeoutException:timeout从池获取连接许可证


关于如何使这项工作起作用,有什么想法吗?

我相信还有一个解决办法。我在riak邮件列表中看到的一个推荐解决方案是安装并处理故障转移