2016-04-22 3 views
1

У меня есть приложение загрузки Spring, которое использует Spring Data для Cassandra. Одним из требований является то, что приложение запустится, даже если кластер Cassandra недоступен. Приложение регистрирует ситуацию, и все ее конечные точки не будут работать должным образом, но приложение не завершает работу. В это время он должен попытаться подключиться к кластеру. Когда кластер доступен, приложение должно начать работать нормально. Если я могу подключиться во время запуска приложения, и кластер становится недоступным после этого, драйвер java cassandra способен управлять повторными попытками. Как я могу управлять повторениями во время запуска приложения и использовать Cassandra Repositories из Spring Data?Восстановление кластера Cassandra

Thanx

ответ

0

Одним из требований является то, что приложение будет запускаться, даже если Cassandra кластер недоступен

Я думаю, вы должны прочитать эту сессию из дока драйвера Java: http://datastax.github.io/java-driver/manual/#cluster-initialization

Объект Cluster не подключается автоматически, если не выполняются некоторые вызовы.

Поскольку вы используете Spring Data Cassandra (который я не рекомендую, поскольку он имеет меньше возможностей, чем обычный модуль Mapper для Java-драйвера ...) Я не знаю, открыт ли объект Cluster или объект Session непосредственно для пользователей ...

Для повторной попытки вы можете поместить вызов cluster.init() в блок try/catch, и если кластер все еще не доступен, вы поймаете NoHostAvailableException в соответствии с документами. После исключения, вы можете запланировать повторение попытки cluster.init() позже

0

можно запустить приложение Spring загрузки, если Apache Cassandra не доступна, но вы должны определить Session и CassandraTemplate бобы по своему усмотрению с @Lazy. Бобы поставляются из коробки с CassandraAutoConfiguration, но с нетерпением ожидают (поведение по умолчанию), которое создает Session. Session требует подключения к 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(); 
    } 
} 
Смежные вопросы