[英]Unable to connect Java Spring Boot application to Amazon Keyspaces
I'm trying to connect my java spring boot application to my AWS Keyspaces keyspace.我正在尝试将我的 java spring 引导应用程序连接到我的 AWS Keyspaces 密钥空间。 I've followed amazons docs on how to setup and configure this connection using the DataStax Java Driver for Apache Cassandra ( https://docs.aws.amazon.com/keyspaces/latest/devguide/using_java_driver.html ). I've followed amazons docs on how to setup and configure this connection using the DataStax Java Driver for Apache Cassandra ( https://docs.aws.amazon.com/keyspaces/latest/devguide/using_java_driver.html ). I've also looked at the following:我还查看了以下内容:
Here is the error I'm receiving:这是我收到的错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [com/envase/connect/config/CassandraSetup.class]: Invocation of init method failed; org.springframework.beans.factory.BeanCreationException:在 class 路径资源 [com/envase/connect/config/CassandraSetup.class] 中定义名称为“cassandraSession”的 bean 创建错误:调用 init 方法失败; nested exception is com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllErrors() for more): Node(endPoint=cassandra.us-east-2.amazonaws.com:9142, hostId=null, hashCode=3fcfeaa9): [com.datastax.oss.driver.api.core.DriverTimeoutException: [s5|control|id: 0x19776100, L:/192.168.1.105:53683 - R:cassandra.us-east-2.amazonaws.com/3.12.23.181:9142] Protocol initialization request, step 1 (OPTIONS): timed out after 5000 ms] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.Ab嵌套异常是 com.datastax.oss.driver.api.core.AllNodesFailedException:无法到达任何联系点,请确保您提供了有效地址(显示前 1 个节点,使用 getAllErrors() 获取更多信息):Node(endPoint= cassandra.us-east-2.amazonaws.com:9142, hostId=null, hashCode=3fcfeaa9): [com.datastax.oss.driver.api.core.DriverTimeoutException: [s7610|id:/019] 192.168.1.105:53683-R:Z121C60DF0C03083D2693C2693C251F1F1F15FDFB2Z.US-EAST-2.AMAZONAW STERPRINID OUSTIGTION 5000; .support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)~[spring-beans-5.3.6.jar:5.3.6] at org.bspringframework stractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.6.Z6899 stractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring -beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.6.jar:5.3 .6] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)~[spring-beans-5.3.6.jar]:5.36A9D2AC40Z] .AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.6.Z6899 5FCBF432492D15484D04A9D2AC40Z:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.Z93F725 5FCBF432492D15484D04A9D2AC40Z:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans. factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380 ) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.6.jar: 5.3.6] 在 org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.Z93F725 A07423FE1C889F448B33D21F46Z:887) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.6.jar:5.3.6]... 25 common frames omitted Caused by: com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllErrors() for more): Node(endPoint=cassandra.us-east-2.amazonaws.com:9142, hostId=null, hashCode=3fcfeaa9): [com.datastax.oss.driver.api.core.DriverTimeoutException: [s5|control|id: 0x19776100, L:/192.168.1.105:53683 - R:cassandra.us-east-2.amazonaws.com/3.12.23.181:9142] Protocol initialization request, s A07423FE1C889F448B33D21F46Z:887) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.6 .jar:5.3.6]... 25 common frames omitted Caused by: com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1节点,使用 getAllErrors() 获取更多信息):节点(endPoint=cassandra.us-east-2.amazonaws.com:9142,hostId=null,hashCode=3fcfeaa9):[com.datastax.oss.driver.Z8A5DA52ED126447D359E70C05721AA.core. DriverTimeOutException:[S5 |控制| ID:0x19776100,L:/192.168.1.105:53683-ZE1E1D3D3D3D3D40573127E9EE0480CAF1大约tep 1 (OPTIONS): timed out after 5000 ms] at com.datastax.oss.driver.api.core.AllNodesFailedException.copy(AllNodesFailedException.java:141) ~[java-driver-core-4.8.0.jar:na] at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:149) ~[java-driver-core-4.8.0.jar:na] at com.datastax.oss.driver.api.core.session.SessionBuilder.build(SessionBuilder.java:674) ~[java-driver-core-4.8.0.jar:na] at org.springframework.data.cassandra.config.CqlSessionFactoryBean.buildSystemSession(CqlSessionFactoryBean.java:498) ~[spring tep 1 (OPTIONS): timed out after 5000 ms] at com.datastax.oss.driver.api.core.AllNodesFailedException.copy(AllNodesFailedException.java:141) ~[java-driver-core-4.8.0.jar:na ] at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:149) ~[java-driver-core-4.8.0.jar:na] at com.datastax.oss .driver.api.core.session.SessionBuilder.build(SessionBuilder.java:674) ~[java-driver-core-4.8.0.jar:na] at org.springframework.data.cassandra.config.CqlSessionFactoryBean.buildSystemSession( CqlSessionFactoryBean.java:498) ~[弹簧-data-cassandra-3.1.8.jar:3.1.8] at org.springframework.data.cassandra.config.CqlSessionFactoryBean.afterPropertiesSet(CqlSessionFactoryBean.java:451) ~[spring-data-cassandra-3.1.8.jar:3.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.6.jar:5.3.6]... 36 common frames omitted Suppressed: com.datastax.oss.driver.api.core.DriverTimeoutException: [s5|control|id: 0x19776100, L:/192.168.1.105:53683 - ZE1E1D3D -data-cassandra-3.1.8.jar:3.1.8] at org.springframework.data.cassandra.config.CqlSessionFactoryBean.afterPropertiesSet(CqlSessionFactoryBean.java:451) ~[spring-data-cassandra-3.1.8.jar: 3.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory. support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.6.jar:5.3.6]... 36 common frames omitted Suppressed: com.datastax.oss.driver.api.core.DriverTimeoutException : [s5|control|id: 0x19776100, L:/192.168.1.105:53683 - ZE1E1D3D 40573127E9EE0480CAF1283D6Z:cassandra.us-east-2.amazonaws.com/3.12.23.181:9142] Protocol initialization request, step 1 (OPTIONS): timed out after 5000 ms at com.datastax.oss.driver.internal.core.channel.ChannelHandlerRequest.onTimeout(ChannelHandlerRequest.java:108) ~[java-driver-core-4.8.0.jar:na] 40573127E9EE0480CAF1283D6Z:cassandra.us-east-2.amazonaws.com/3.12.23.181:9142] Protocol initialization request, step 1 (OPTIONS): timed out after 5000 ms at com.datastax.oss.driver.internal.core.channel. ChannelHandlerRequest.onTimeout(ChannelHandlerRequest.java:108) ~[java-driver-core-4.8.0.jar:na]
It also prints the following warning over and over until the above error is thrown:它还会一遍又一遍地打印以下警告,直到引发上述错误:
2021-04-27 15:04:48.106 WARN 17664 --- [ s4-admin-0] c.dodinternal.core.pool.ChannelPool: [s4|/3.12.23.155:9142] Error while opening new channel (ConnectionInitException: [s4|id: 0x0e9e0986, L:/192.168.1.105:53764 - R:3.12.23.155/3.12.23.155:9142] Protocol initialization request, step 1 (STARTUP {CQL_VERSION=3.0.0, DRIVER_NAME=DataStax Java driver for Apache Cassandra(R), DRIVER_VERSION=4.8.0, CLIENT_ID=f943143d-48b5-40ce-9d3c-f12123f3d687}): failed to send request (javax.net.ssl.SSLHandshakeException: No subject alternative names matching IP address 3.12.23.155 found)) 2021-04-27 15:04:48.106 WARN 17664 --- [s4-admin-0] c.dodinternal.core.pool.ChannelPool:[s4|/3.12.23.155:9142] 打开新通道时出错(ConnectionInitException: [s4|id: 0x0e9e0986, L:/192.168.1.105:53764 - R:3.12.23.155/3.12.23.155:9142] Protocol initialization request, step 1 (STARTUP {CQL_VERSION=3.0.0, DRIVER_NAME=DataStax Java driver for Apache Cassandra(R), DRIVER_VERSION=4.8.0, CLIENT_ID=f943143d-48b5-40ce-9d3c-f12123f3d687}): failed to send request (javax.net.ssl.SSLHandshakeException: No subject alternative names matching IP address 3.12.23.155 found) )
build.gradle: build.gradle:
plugins {
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.envase.connect'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation group: 'com.datastax.oss', name: 'java-driver-core', version: '4.8.0'
implementation group: 'com.datastax.oss', name: 'java-driver-query-builder', version: '4.8.0'
implementation group: 'com.datastax.oss', name: 'java-driver-mapper-runtime', version: '4.8.0'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-cassandra-reactive', version: '2.4.5'
I've also tried version 4.9.0 and 4.11.0 for the com.datastax.oss dependencies我还为 com.datastax.oss 依赖项尝试了 4.9.0 和 4.11.0 版本
application.conf应用程序.conf
datastax-java-driver {
basic.contact-points = ["cassandra.us-east-2.amazonaws.com:9142"]
advanced.auth-provider {
class = PlainTextAuthProvider
username = "******"
password = "******"
}
basic.load-balancing-policy {
local-datacenter = "us-east-2"
}
advanced.connection {
timeout = 30 seconds
connect-timeout = 30 seconds
init-query-timeout = 30 seconds
}
advanced.metadata {
schema.enabled = "false"
token-map.enabled = "false"
}
advanced.ssl-engine-factory {
class = DefaultSslEngineFactory
cipher-suites = [ "TLS_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_256_CBC_SHA" ]
truststore-path = "./src/main/resources/cassandra_truststore.jks"
truststore-password = "****"
}
}
cassandra config class: cassandra 配置 class:
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
import com.datastax.oss.driver.internal.core.config.typesafe.DefaultDriverConfigLoader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractReactiveCassandraConfiguration;
import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.repository.config.EnableReactiveCassandraRepositories;
@Configuration
@EnableReactiveCassandraRepositories
public class CassandraSetup extends AbstractReactiveCassandraConfiguration {
@Value("${cassandra.contact-points}")
private String contactPoints;
@Value("${cassandra.port}")
private int port;
@Value("${cassandra.keyspace}")
private String keyspace;
@Value("${cassandra.data.local-datacenter}")
private String dataCenter;
@Override
protected String getKeyspaceName() {
return keyspace;
}
@Override
protected String getContactPoints() {
return contactPoints;
}
@Override
protected int getPort() {
return port;
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.NONE;
}
@Override
protected CqlSession getRequiredSession() {
DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf");
return CqlSession.builder().withConfigLoader(loader).withLocalDatacenter(dataCenter).build();
}
}
I've continued to get the same error no matter what I try.无论我尝试什么,我都会继续遇到同样的错误。 Any and all help would be greatly appreciated.任何和所有的帮助将不胜感激。
The issue looks related to the certificate you are using the certificat该问题看起来与您使用的证书有关
this is the clue:这是线索:
"javax.net.ssl.SSLHandshakeException: No subject alternative names matching IP address 3.12.23.15"
check this out: Java CertificateException "No subject alternative names matching IP address... found"看看这个: Java CertificateException“没有与 IP 地址匹配的主题替代名称......找到”
The error message from AWS Keyspaces is misleading for timeout.来自 AWS Keyspaces 的错误消息会误导超时。 The real problem is that the driver's ssl-engine-factory is configured to the default value - none.真正的问题是驱动程序的 ssl-engine-factory 配置为默认值 - 无。 See: https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/ssl/请参阅: https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/ssl/
When it is used the spring configuration AbstractReactiveCassandraConfiguration
the datastax configuration standard behavior is overwritten and is not working.当使用 spring 配置AbstractReactiveCassandraConfiguration
时, datastax 配置标准行为被覆盖并且不起作用。
The method getSessionBuilderConfigurerWrapper
from the AbstractSessionConfiguration
class (extended by the AbstractReactiveCassandraConfiguration
) defines driver typesafe configuration only to defaultOverrides(which are system properties) and defaultReference(which is the "reference.conf"). AbstractSessionConfiguration
class(由AbstractReactiveCassandraConfiguration
扩展)中的方法getSessionBuilderConfigurerWrapper
仅将驱动程序类型安全配置定义为 defaultOverrides(它们是系统属性)和 defaultReference(它是“reference.conf”)。
Therefore in order to apply your configuration you should override the getDriverConfigurationResource
from the AbstractSessionConfiguration
class and return it as Resource
.因此,为了应用您的配置,您应该覆盖AbstractSessionConfiguration
class 中的getDriverConfigurationResource
并将其作为Resource
返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.