简体   繁体   English

无法将 Java Spring 引导应用程序连接到 Amazon Keyspaces

[英]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:我还查看了以下内容:

  1. Unsupported partitioner with Amazon Keyspaces (for Apache Cassandra) 不支持使用 Amazon Keyspaces 的分区程序(对于 Apache Cassandra)
  2. Connect to AWS keyspaces with Spring reactive data autoconfiguration 使用 Spring 反应数据自动配置连接到 AWS 键空间
  3. https://docs.spring.io/spring-data/cassandra/docs/3.2.0/reference/html/#cassandra.connectors https://docs.spring.io/spring-data/cassandra/docs/3.2.0/reference/html/#cassandra.connectors

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.

相关问题 无法将 Spring Boot Java 应用程序连接到亚马逊密钥空间 - unable to connect spring boot java application to amazon keyspaces 无法将我的Spring Boot应用程序连接到mysql - Unable to connect my spring boot application to mysql Spring 启动应用程序无法连接到 mariadb(在 Docker 中) - Spring boot application unable to connect to mariadb (in Docker) 无法从 Spring Boot 应用程序连接到 IBM MQ - Unable to connect to IBM MQ from a Spring Boot application 无法将 Microsoft SQL Server 连接到 Spring Boot 应用程序 - Unable to Connect Microsoft SQL Server to Spring Boot Application 无法将角度项目与spring boot web应用程序连接 - Unable to connect angular project with spring boot web application 使用 Spring 反应式数据自动配置连接到 AWS 密钥空间 - Connect to AWS keyspaces with Spring reactive data autoconfiguration 无法将Spring Boot Java应用程序提交到Spark集群 - Unable to submit Spring boot java application to Spark cluster Spring Boot应用程序无法启动? - Spring Boot Application Unable to start? 面临从基于 spring 引导的 java 应用程序的 Amazon SQS 队列读取的问题 - Facing problem reading from Amazon SQS queue from a spring boot based java application
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM