如何将Java代码连接到RIAK数据库并获取记录

时间:2015-07-24 13:22:49

标签: java riak

我尝试过Basho的文档片段,如下所示:

public class TasteOfRiak {              
public static void main(String[] args) throws UnknownHostException, ExecutionException, InterruptedException 
  {          
     RiakClient client = RiakClient.newClient(port, "IP");      
     Location location = new Location(new Namespace("Bucket"), "bucketType");   
     FetchValue fv = new FetchValue.Builder(location).build();  
     FetchValue.Response response = client.execute(fv);                     
     String value = response.getValue(String.class);    
     System.out.println(value);              
     client.shutdown();         
  }
}

但是,这引发了异常:

  

[main]错误com.basho.riak.client.core.RiakNode - 连接尝试失败:java.net.ConnectException:   连接超时:无更多信息:   线程" main"中的例外情况[pool-1-thread-2] INFO com.basho.riak.client.core.DefaultNodeManager - NodeManager将节点移动到不健康列表; 3.34.211.202:8098   java.util.concurrent.ExecutionException:com.basho.riak.client.core.NoNodesAvailableException       在com.basho.riak.client.core.FutureOperation.get(FutureOperation.java:260)       在com.basho.riak.client.api.commands.CoreFutureAdapter.get(CoreFutureAdapter.java:52)       在com.basho.riak.client.api.RiakCommand.execute(RiakCommand.java:89)       在com.basho.riak.client.api.RiakClient.execute(RiakClient.java:293)       在TasteOfRiak.main(TasteOfRiak.java:20)   引起:com.basho.riak.client.core.NoNodesAvailableException       在com.basho.riak.client.core.DefaultNodeManager.executeOnNode(DefaultNodeManager.java:95)       在com.basho.riak.client.core.RiakCluster.execute(RiakCluster.java:197)       在com.basho.riak.client.core.RiakCluster.retryOperation(RiakCluster.java:328)       在com.basho.riak.client.core.RiakCluster.access $ 800(RiakCluster.java:44)       在com.basho.riak.client.core.RiakCluster $ RetryTask.run(RiakCluster.java:340)       at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)       在java.util.concurrent.FutureTask.run(FutureTask.java:262)       at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:178)       at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)       在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)       在java.lang.Thread.run(Thread.java:744)

2 个答案:

答案 0 :(得分:1)

检查riak节点是否正在运行(如Craig所说),您可以在etc/vm.args中看到节点名称。

确保erlang节点cookie正确无误。 Erlang VM会检查来自其他VM的cookie是否匹配,如果没有,它会拒绝ping或连接请求。 ~/.erlang.cookie中的本地Cookie位置建议在连接之前尝试将VM Cookie设置为本地Cookie。

另一种方式:

$ bin/riak console
%% set cookie
erlang:set_cookie(your_riak_node_name, your_cookie)

答案 1 :(得分:0)

riak java客户端不支持HTTP。确保使用协议缓冲端口进行连接。默认值为8087

还要确保您的Riak服务器正在侦听您指定的IP地址。您可以在etc/riak/riak.conf

中编辑监听器