如何从同一个 Boot 应用程序创建两个独立的cassandra集群?

pb3s4cty  于 2022-11-23  发布在  Cassandra
关注(0)|答案(1)|浏览(149)

我很难从一个Sping Boot 应用程序连接到两个不同的集群。任务是从ec2上的Cassandra获取数据,并批量插入到AWS密钥空间。我可以从ec2上的Cassandra获取数据。
在这里,我将重写
集群构建器定制器
当尝试连接到运行在ec2上的Cassandra集群时,一切正常,但要求还有一个集群从Cassandra ec2中选择数据并插入到另一个Cassandra集群中。
问题是,当我覆盖在AWS Keyspace中创建集群的自定义方法时,接触点被添加到以前创建的集群中,而不是创建新集群。
之后,我尝试创建两个不同的配置来示例化两个不同的集群。唯一不同是它是为第三方云 cassandra 。

@Configuration
@EnableCassandraRepositories(cassandraTemplateRef = "cassandraKeyspaceServiceTemplate")
public class CassandraClusterOneServiceConfiguration {

  @Autowired
  private CassandraOneProperties cassandraProperties;

  @Bean(name = "cluster1")
  @Primary
  public CassandraClusterFactoryBean cluster() {
    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
    cluster.setContactPoints(cassandraProperties.getContactPoints());
    cluster.setPort(cassandraProperties.getPort());
    cluster.setSslEnabled(cassandraProperties.isSsl());
    cluster.setUsername(cassandraProperties.getUsername());
    cluster.setPassword(cassandraProperties.getPassword());
   
     final SSLContext sslContext = SSLContext.getInstance("SSL");
    

    cluster.setSslOptions(
        RemoteEndpointAwareJdkSSLOptions.builder().withSSLContext(sslContext).build());
    cluster.setJmxReportingEnabled(false);
    return cluster;
  }

  @Bean(name = "clusterContext1")
  @Primary
  public CassandraMappingContext mappingContext() {
    return new CassandraMappingContext();
  }

  @Bean(name = "clusterConverter1")
  @Primary
  public CassandraConverter converter() {
    return new MappingCassandraConverter(mappingContext());
  }

  @Bean("cassandraKeyspaceServiceSession")
  @Primary
  public CassandraSessionFactoryBean session() {

    CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
    session.setCluster(cluster().getObject());
    session.setKeyspaceName(cassandraProperties.getKeyspaceName());
    session.setConverter(converter());
    session.setSchemaAction(SchemaAction.NONE);

    return session;
  }

  @Bean("cassandraKeyspaceServiceTemplate")
  @Primary
  public CassandraOperations cassandraTemplate() {
    return new CassandraTemplate(session().getObject());
  }
}

在这段代码中,第一个集群也设置正确,但是第二个集群给我一个NoHostAvailable异常,这似乎是一个连接超时。
如何在Sping Boot 应用程序中创建两个不同的群集?

ljsrvy3e

ljsrvy3e1#

您需要创建两个类,如示例Managing Multiple Cassandra Sessions所示。
此外,您还可以在此处找到Amazon Keyspaces和Sping Boot 的一些最佳实践。https://github.com/aws-samples/amazon-keyspaces-examples/tree/main/java/datastax-v4/spring

相关问题