问题描述
我正在尝试将我的 java spring boot 应用程序连接到我的 AWS Keyspaces 键空间。 我已经关注亚马逊文档,了解如何使用 DataStax Java Driver for Apache Cassandra (https://docs.aws.amazon.com/keyspaces/latest/devguide/using_java_driver.html) 设置和配置此连接。我还查看了以下内容:
- Unsupported partitioner with Amazon Keyspaces (for Apache Cassandra)
- Connect to AWS keyspaces with Spring reactive data autoconfiguration
- https://docs.spring.io/spring-data/cassandra/docs/3.2.0/reference/html/#cassandra.connectors
这是我收到的错误:
org.springframework.beans.factory.BeanCreationException:创建名为“cassandraSession”的 bean 在类路径资源 [com/envase/connect/config/CassandraSetup.class] 中定义时出错:调用 init 方法失败;嵌套异常是 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: [s5|control|id: 0x19776100,L:/ 192.168.1.105:53683 - R:cassandra.us-east-2.amazonaws.com/3.12.23.181:9142] 协议初始化请求,第 1 步(选项):5000 毫秒后超时] 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.initializeBean(AbstractAutowireCapablebeanfactory.java:1786) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6] 在 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.3.6] 在 org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:333) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:208) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1380) ~[spring-beans-5.3.6.jar:5.3.6] 在 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.java:887) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.6.jar:5.3.6] ... 省略了 25 个常用帧 引起:com.datastax.oss.driver.api.core.AllNodesFailedException:无法到达任何联系点,请确保您提供了有效地址(显示前 1 个节点,使用 getAllErrors() 获取更多):Node(endPoint= cassandra.us-east-2.amazonaws.com:9142,L:/ 192.168.1.105:53683 - R:cassandra.us-east-2.amazonaws.com/3.12.23.181:9142] 协议初始化请求,第 1 步(选项):5000 毫秒后超时] 在 com.datastax.oss.driver.api.core.AllNodesFailedException.copy(AllNodesFailedException.java:141) ~[java-driver-core-4.8.0.jar:na] 在 com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptably(CompletableFutures.java:149) ~[java-driver-core-4.8.0.jar:na] 在 com.datastax.oss.driver.api.core.session.SessionBuilder.build(SessionBuilder.java:674) ~[java-driver-core-4.8.0.jar:na] 在 org.springframework.data.cassandra.config.CqlSessionfactorybean.buildSystemSession(CqlSessionfactorybean.java:498) ~[spring-data-cassandra-3.1.8.jar:3.1.8] 在 org.springframework.data.cassandra.config.CqlSessionfactorybean.afterPropertiesSet(CqlSessionfactorybean.java:451) ~[spring-data-cassandra-3.1.8.jar:3.1.8] 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.invokeInitMethods(AbstractAutowireCapablebeanfactory.java:1845) ~[spring-beans-5.3.6.jar:5.3.6] 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.initializeBean(AbstractAutowireCapablebeanfactory.java:1782) ~[spring-beans-5.3.6.jar:5.3.6] ...省略了36个常用帧 抑制: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] 协议初始化请求,第 1 步(选项):5000 毫秒后超时 在 com.datastax.oss.driver.internal.core.channel.ChannelHandlerRequest.onTimeout(ChannelHandlerRequest.java:108) ~[java-driver-core-4.8.0.jar:na]
它还会一遍又一遍地打印以下警告,直到抛出上述错误:
2021-04-27 15:04:48.106 WARN 17664 --- [s4-admin-0] cdodinternal.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] 协议初始化请求,第 1 步(STARTUP {CQL_VERSION NAME0 driver,DtaxRIVER00对于 Apache Cassandra(R),DRIVER_VERSION=4.8.0,CLIENT_ID=f943143d-48b5-40ce-9d3c-f12123f3d687}):未能发送请求(javax.net.ssl.SSLHandshakeException:没有主题替代名称匹配.1552IP地址找到))
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',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'
对于 com.datastax.oss 依赖项,我还尝试了 4.9.0 和 4.11.0 版
应用程序.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 配置类:
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();
}
}
无论我尝试什么,我都继续遇到相同的错误。任何和所有帮助将不胜感激。
解决方法
问题看起来与您使用的证书有关
这是线索:
my_data <- data.frame(
stringsAsFactors = FALSE,ID = c(1L,2L,3L,4L,5L,NA),X = c("1 sandwich 2 hamburger","1 sandwich 4 salad 5 soda 7 soup","0 chicken wings",NA,NA)
)
看看这个: Java CertificateException "No subject alternative names matching IP address ... found"