在测试 scalardb (2.2.0) 的 cosmosdb 的功能时,当我尝试使用以下代码初始化 DistributedTransaction 或 Cosmos 对象时,我无法通过 scalardb 连接到 azure cosmos db 实例
DatabaseConfig cosmosDBConfig = new DatabaseConfig(f);
Cosmos cosmos = new Cosmos(cosmosDBConfig);
DistributedTransactionManager db = Guice.createInjector(new TransactionModule(cosmosDBConfig))
.getInstance(TransactionService.class); // failed here
// also tried with this
// Cosmos cosmos = new Cosmos(cosmosDBConfig); // fail here
我收到以下错误
Network failure
java.lang.IllegalArgumentException: port out of range:-1
at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143)
at java.net.InetSocketAddress.<init>(InetSocketAddress.java:188)
at reactor.netty.tcp.InetSocketAddressUtil.createForIpString(InetSocketAddressUtil.java:88)
at reactor.netty.tcp.InetSocketAddressUtil.createInetSocketAddress(InetSocketAddressUtil.java:74)
at reactor.netty.tcp.InetSocketAddressUtil.createUnresolved(InetSocketAddressUtil.java:48)
at reactor.netty.tcp.TcpUtils._updatePort(TcpUtils.java:91)
at reactor.netty.tcp.TcpUtils.updatePort(TcpUtils.java:73)
at reactor.netty.tcp.TcpClient.lambda$port$5(TcpClient.java:411)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClient.connect(TcpClient.java:196)
at reactor.netty.http.client.HttpClientFinalizer.connect(HttpClientFinalizer.java:68)
at reactor.netty.http.client.HttpClientFinalizer.responseConnection(HttpClientFinalizer.java:85)
at com.azure.cosmos.implementation.http.ReactorNettyClient.send(ReactorNettyClient.java:123)
at com.azure.cosmos.implementation.RxGatewayStoreModel.performRequest(RxGatewayStoreModel.java:159)
at com.azure.cosmos.implementation.RxGatewayStoreModel.read(RxGatewayStoreModel.java:91)
at com.azure.cosmos.implementation.RxGatewayStoreModel.invokeAsyncInternal(RxGatewayStoreModel.java:351)
at com.azure.cosmos.implementation.RxGatewayStoreModel.lambda$invokeAsync$3(RxGatewayStoreModel.java:366)
at com.azure.cosmos.implementation.BackoffRetryUtility.lambda$executeRetry$0(BackoffRetryUtility.java:34)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:79)
at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)
at reactor.core.publisher.FluxFromMonoOperator.subscribe(FluxFromMonoOperator.java:76)
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:117)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Failed to retrieve database account information. java.lang.IllegalArgumentException: port out of range:-1
Fail to reach global gateway [scalardb-test-cosmos.cassandra.cosmos.azure.com], [null]
startRefreshLocationTimerAsync() - Unable to refresh database account from any location. Exception: CosmosException{userAgent=Linux/4.18.0-147.8.1.el8_1.x86_64 JRE/1.8.0_252 cosmosdb-java-sdk/4.1.0, error=null, resourceAddress='null', requestUri='null', statusCode=0, message=null, causeInfo=[class: class java.lang.IllegalArgumentException, message: port out of range:-1], responseHeaders={}, requestHeaders=[Accept=application/json, x-ms-date=Thu, 01 Oct 2020 09:28:49 GMT]}
CosmosException{userAgent=Linux/4.18.0-147.8.1.el8_1.x86_64 JRE/1.8.0_252 cosmosdb-java-sdk/4.1.0, error=null, resourceAddress='null', requestUri='null', statusCode=0, message=null, causeInfo=[class: class java.lang.IllegalArgumentException, message: port out of range:-1], responseHeaders={}, requestHeaders=[Accept=application/json, x-ms-date=Thu, 01 Oct 2020 09:28:49 GMT]}
at com.azure.cosmos.BridgeInternal.createCosmosException(BridgeInternal.java:281)
at com.azure.cosmos.implementation.RxGatewayStoreModel.lambda$toDocumentServiceResponse$2(RxGatewayStoreModel.java:301)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:88)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:134)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165)
at reactor.core.publisher.MonoSingle$SingleSubscriber.onError(MonoSingle.java:141)
at reactor.core.publisher.Operators.error(Operators.java:196)
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:134)
at reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49)
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:79)
at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)
at reactor.core.publisher.FluxFromMonoOperator.subscribe(FluxFromMonoOperator.java:76)
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:117)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: port out of range:-1
at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143)
at java.net.InetSocketAddress.<init>(InetSocketAddress.java:188)
at reactor.netty.tcp.InetSocketAddressUtil.createForIpString(InetSocketAddressUtil.java:88)
at reactor.netty.tcp.InetSocketAddressUtil.createInetSocketAddress(InetSocketAddressUtil.java:74)
at reactor.netty.tcp.InetSocketAddressUtil.createUnresolved(InetSocketAddressUtil.java:48)
at reactor.netty.tcp.TcpUtils._updatePort(TcpUtils.java:91)
at reactor.netty.tcp.TcpUtils.updatePort(TcpUtils.java:73)
at reactor.netty.tcp.TcpClient.lambda$port$5(TcpClient.java:411)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClientBootstrap.configure(TcpClientBootstrap.java:39)
at reactor.netty.tcp.TcpClient.connect(TcpClient.java:196)
at reactor.netty.http.client.HttpClientFinalizer.connect(HttpClientFinalizer.java:68)
at reactor.netty.http.client.HttpClientFinalizer.responseConnection(HttpClientFinalizer.java:85)
at com.azure.cosmos.implementation.http.ReactorNettyClient.send(ReactorNettyClient.java:123)
at com.azure.cosmos.implementation.RxGatewayStoreModel.performRequest(RxGatewayStoreModel.java:159)
at com.azure.cosmos.implementation.RxGatewayStoreModel.read(RxGatewayStoreModel.java:91)
at com.azure.cosmos.implementation.RxGatewayStoreModel.invokeAsyncInternal(RxGatewayStoreModel.java:351)
at com.azure.cosmos.implementation.RxGatewayStoreModel.lambda$invokeAsync$3(RxGatewayStoreModel.java:366)
at com.azure.cosmos.implementation.BackoffRetryUtility.lambda$executeRetry$0(BackoffRetryUtility.java:34)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
... 15 more
Exception in thread "main" java.lang.NullPointerException
at com.azure.cosmos.BridgeInternal.isEnableMultipleWriteLocations(BridgeInternal.java:163)
at com.azure.cosmos.implementation.RxDocumentClientImpl.initializeGatewayConfigurationReader(RxDocumentClientImpl.java:264)
at com.azure.cosmos.implementation.RxDocumentClientImpl.init(RxDocumentClientImpl.java:281)
at com.azure.cosmos.implementation.AsyncDocumentClient$Builder.build(AsyncDocumentClient.java:203)
at com.azure.cosmos.CosmosAsyncClient.<init>(CosmosAsyncClient.java:79)
at com.azure.cosmos.CosmosClientBuilder.buildAsyncClient(CosmosClientBuilder.java:649)
at com.azure.cosmos.CosmosClient.<init>(CosmosClient.java:30)
at com.azure.cosmos.CosmosClientBuilder.buildClient(CosmosClientBuilder.java:661)
at com.scalar.db.storage.cosmos.Cosmos.<init>(Cosmos.java:58)
但是,我能够在 nodejs 和 java 客户端上使用 cosmosdb sdk(没有 scalardb)将数据插入到实例中。下面是我的 scalardb 配置。我什至尝试在我的一个 azure vm 上运行 scalardb 初始化代码,但由于同样的错误而无法正常工作。下面是我的scalardb配置
scalar.db.contact_points=<InstanceContactPoints>
scalar.db.contact_port=<DefaultPort>
scalar.db.username=<InstanceUsername>
scalar.db.password=<InstancePassword>
scalar.db.storage=cosmos
请问是不是我的配置有问题?我该如何设置?提前致谢。