卡桑德拉集群恢复



我有一个使用 Spring Data for Cassandra 的 Spring Boot 应用程序。其中一个要求是,即使 Cassandra 集群不可用,应用程序也会启动。应用程序记录情况,其所有端点将无法正常工作,但应用程序不会关闭。在此期间,它应重试连接到群集。当群集可用时,应用程序应开始正常运行。如果我能够在应用程序启动期间连接,并且集群在此之后变得不可用,则 cassandra java 驱动程序能够管理重试。如何在应用程序启动期间管理重试,同时仍然使用 Spring Data 中的 Cassandra 存储库?

感谢

如果 Apache Cassandra 不可用,则可以启动 Spring Boot 应用程序,但您需要定义 Session 并使用 @Lazy 自行CassandraTemplate bean。Bean 开箱即用,带有CassandraAutoConfiguration但被急切地初始化(默认行为),这会创建一个SessionSession需要连接到 Cassandra,如果它没有延迟初始化,这将阻止启动。

以下代码将延迟初始化资源:

@Configuration
public class MyCassandraConfiguration {
    @Bean
    @Lazy
    public CassandraTemplate cassandraTemplate(@Lazy Session session, CassandraConverter converter) throws Exception {
        return new CassandraTemplate(session, converter);
    }
    @Bean
    @Lazy
    public Session session(CassandraConverter converter, Cluster cluster,
            CassandraProperties cassandraProperties) throws Exception {
        CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
        session.setCluster(cluster);
        session.setConverter(converter);
        session.setKeyspaceName(cassandraProperties.getKeyspaceName());
        session.setSchemaAction(SchemaAction.NONE);
        return session.getObject();
    }
}

其中一个要求是,即使 Cassandra 集群不可用,应用程序也会启动。

我认为您应该从 Java 驱动程序文档中阅读此会话:http://datastax.github.io/java-driver/manual/#cluster-initialization

除非执行某些调用,否则Cluster对象不会自动连接。

由于您使用的是Spring Data Cassandra(我不建议这样做,因为它的功能比Java驱动程序的普通映射器模块少...我不知道Cluster对象或Session对象是否直接暴露给用户......

对于重试,您可以将cluster.init()调用放在 try/catch 块中,如果集群仍然不可用,您将根据文档捕获NoHostAvailableException。出现异常时,您可以安排稍后重试cluster.init()

相关内容

  • 没有找到相关文章

最新更新