无法使用 groovy 脚本在 couchbase 上创建主索引
Unable to create primary index on couchbase using groovy script
我无法使用 groovy 脚本在 couchbase 上创建主索引。以下是我使用的代码行:-
@Grab('com.couchbase.client:java-client:2.2.6')
import java.util.concurrent.CountDownLatch;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.CouchbaseCluster
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.N1qlQueryRow;
import com.couchbase.client.java.query.SimpleN1qlQuery;
import com.couchbase.client.java.env.CouchbaseEnvironment;
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).build();
def cluster = CouchbaseCluster.create(env, IPADDRESS);
def bucket = cluster.openBucket(BUCKET_NAME, BUCKET_PASSWORD);
log.info "Connection done"
String queryString = "CREATE PRIMARY INDEX `PrimInd` ON BUCKET_NAME"
bucket.query(N1qlQuery.simple(queryString))
log.info "Primary index created"
它给我如下错误:-
java.lang.RuntimeException: java.util.concurrent.TimeoutException at this line:-
bucket.query(N1qlQuery.simple(queryString))
连接正常,同样的查询在 couchbase 服务器中有效。所以,我认为我的代码有问题。
你能帮我解决这个问题吗?
在 Couchbase Java 客户端中,query()
方法委托给 Blocking
API,它在幕后使用 JavaRx。阻塞 API 状态的 source 代码:
If an error happens inside the Observable
, it will be raised
as an Exception
. If the timeout kicks in, a TimeoutException
nested in a RuntimeException
is thrown to be fully compatible with the Observable.timeout(long, TimeUnit)
behavior.
您遇到 TimeoutException
嵌套在 RuntimeException
中,因此根本原因是您的查询超时。
DefaultCouchbaseEnvironment
defaults to a queryTimeout (the timeout used(对于 N1qlQuery 查询)75 个 milli-seconds。您可以使用环境构建器更改此默认值:
def env = DefaultCouchbaseEnvironment.builder()
.connectTimeout(10000)
.queryTimeout(10000) // This is the query timeout
.build()
我无法使用 groovy 脚本在 couchbase 上创建主索引。以下是我使用的代码行:-
@Grab('com.couchbase.client:java-client:2.2.6')
import java.util.concurrent.CountDownLatch;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.CouchbaseCluster
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.N1qlQueryRow;
import com.couchbase.client.java.query.SimpleN1qlQuery;
import com.couchbase.client.java.env.CouchbaseEnvironment;
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).build();
def cluster = CouchbaseCluster.create(env, IPADDRESS);
def bucket = cluster.openBucket(BUCKET_NAME, BUCKET_PASSWORD);
log.info "Connection done"
String queryString = "CREATE PRIMARY INDEX `PrimInd` ON BUCKET_NAME"
bucket.query(N1qlQuery.simple(queryString))
log.info "Primary index created"
它给我如下错误:-
java.lang.RuntimeException: java.util.concurrent.TimeoutException at this line:-
bucket.query(N1qlQuery.simple(queryString))
连接正常,同样的查询在 couchbase 服务器中有效。所以,我认为我的代码有问题。
你能帮我解决这个问题吗?
在 Couchbase Java 客户端中,query()
方法委托给 Blocking
API,它在幕后使用 JavaRx。阻塞 API 状态的 source 代码:
If an error happens inside the
Observable
, it will be raised as anException
. If the timeout kicks in, aTimeoutException
nested in aRuntimeException
is thrown to be fully compatible with theObservable.timeout(long, TimeUnit)
behavior.
您遇到 TimeoutException
嵌套在 RuntimeException
中,因此根本原因是您的查询超时。
DefaultCouchbaseEnvironment
defaults to a queryTimeout (the timeout used(对于 N1qlQuery 查询)75 个 milli-seconds。您可以使用环境构建器更改此默认值:
def env = DefaultCouchbaseEnvironment.builder()
.connectTimeout(10000)
.queryTimeout(10000) // This is the query timeout
.build()