[英]unable to connect spring boot java application to amazon keyspaces
[英]Unable to connect Java Spring Boot application to Amazon Keyspaces
我正在嘗試將我的 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 ). 我還查看了以下內容:
這是我收到的錯誤:
org.springframework.beans.factory.BeanCreationException:在 class 路徑資源 [com/envase/connect/config/CassandraSetup.class] 中定義名稱為“cassandraSession”的 bean 創建錯誤:調用 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: [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] 在 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] 在 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節點,使用 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) ~[彈簧 -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]
它還會一遍又一遍地打印以下警告,直到引發上述錯誤:
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:
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'
我還為 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 配置 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();
}
}
無論我嘗試什么,我都會繼續遇到同樣的錯誤。 任何和所有的幫助將不勝感激。
該問題看起來與您使用的證書有關
這是線索:
"javax.net.ssl.SSLHandshakeException: No subject alternative names matching IP address 3.12.23.15"
來自 AWS Keyspaces 的錯誤消息會誤導超時。 真正的問題是驅動程序的 ssl-engine-factory 配置為默認值 - 無。 請參閱: https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/ssl/
當使用 spring 配置AbstractReactiveCassandraConfiguration
時, datastax 配置標准行為被覆蓋並且不起作用。
AbstractSessionConfiguration
class(由AbstractReactiveCassandraConfiguration
擴展)中的方法getSessionBuilderConfigurerWrapper
僅將驅動程序類型安全配置定義為 defaultOverrides(它們是系統屬性)和 defaultReference(它是“reference.conf”)。
因此,為了應用您的配置,您應該覆蓋AbstractSessionConfiguration
class 中的getDriverConfigurationResource
並將其作為Resource
返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.