微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用ScalarDB无法连接到我自己的Azure Cosmos数据库实例

如何解决使用ScalarDB无法连接到我自己的Azure Cosmos数据库实例

虽然我正在测试scalardb(2.2.0)的cosmosdb功能,但是当我尝试使用以下代码初始化distributedTransaction或Cosmos对象时,我无法通过scalardb连接到azure cosmos db实例。 / p>

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,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

我想知道我的配置是否错误?如何设置?预先感谢。

解决方法

您的代码看起来不错。 我想知道scalar.db.contact_points是否在您的Scalar DB配置中具有像...:443这样的端口。 Cosmos DB不需要scalar.db.contract_port,因为contact_point具有端口。您可以删除scalar.db.contact_port行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。