我正在使用 1.4.3 版本的 java 客户端,并试图连接到我在本地运行的 Couchbase 服务器,但我遇到了身份验证错误。在查看了他们的客户端库如何在他们的类中使用变量的代码(开源不是很好吗?)后,我得出的结论是,如果我想能够连接到我拥有的“桶”为每个“桶”创建一个与该桶具有相同用户名的用户。这对我来说毫无意义。我一定是错的。我不是吗?必须有另一种方法。那是什么方式?
作为引用,这是我用来创建连接的代码(它是 Scala,但在 Java 中看起来几乎相同):
val cf = new CouchbaseConnectionFactoryBuilder()
.setViewTimeout(opTimeout)
.setViewWorkerSize(workerSize)
.setViewConnsPerNode(conPerNode)
.buildCouchbaseConnection(nodes, bucket, password)
new CouchbaseClient(cf)
直接来自他们的 examples .
他们的代码
如果我查看它们连接到“ View ”本身的代码,我会看到以下内容:
public ViewConnection createViewConnection(
List<InetSocketAddress> addrs) throws IOException {
return new ViewConnection(this, addrs, bucket, pass);
}
然后传递给 constructor :
public ViewConnection(final CouchbaseConnectionFactory cf,
final List<InetSocketAddress> seedAddrs, final String user,
final String password) //more code...
并且 user
变量实际上在 HTTP 基本身份验证中用于形成身份验证 header 。 user
变量当然等同于 CouchbaseConnectionFactory 中的 bucket
变量。 .
最佳答案
您是对的 - 每个存储桶都应该使用存储桶名称作为用户进行身份验证。但是,没有任何用户可以“创建”- 您只是使用在集群 UI 上创建存储桶时设置的任何(存储桶)名称和密码。
请注意,人们通常每个应用程序使用一个存储桶(不要认为存储桶 == 表,认为存储桶 == 数据库),因此对于大多数应用程序,您通常不需要超过几个存储桶。
关于java - 在 Couchbase 中查询 View ,Java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769964/