簡體   English   中英

我們如何從同一個 Spring Boot 應用程序創建兩個獨立的 cassandra 集群?

[英]How can we create two separate cassandra clusters from the same Spring Boot application?

我很難從 Spring 引導應用程序連接到兩個不同的集群。 任務是從 ec2 上的 Cassandra 獲取數據並批量插入到 AWS keyspace。 我能夠從 ec2 上的 Cassandra 獲取數據。

在這里,我重寫了自定義方法

org.springframework.boot.autoconfigure.cassandra.ClusterBuilderCustomizer

當嘗試連接到在 ec2 上運行的 Cassandra 集群時,一切正常,但要求還有一個集群到 Cassandra ec2 的 select 數據並插入另一個 Cassandra 集群。

問題是當我覆蓋在 AWS Keyspace 中創建集群的自定義方法時,聯系點被添加到先前創建的集群,而不是創建新集群。

之后,我嘗試創建兩個不同的配置來實例化兩個不同的集群。 參見下面集群 1 的配置。集群 2 相同; 唯一的區別是它適用於雲上的第 3 方 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異常。 這似乎是連接超時。

如何在 Spring Boot 應用程序中創建兩個不同的集群?

您需要創建兩個類,如管理多個 Cassandra 會話示例中所示。

此外,您可以在此處找到有關 Amazon Keyspaces 和 spring 引導的一些最佳實踐。 https://github.com/aws-samples/amazon-keyspaces-examples/tree/main/java/datastax-v4/spring

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM