Настройка согласованности уровня запросов для Cassandra с использованием данных Spring - PullRequest
0 голосов
/ 26 апреля 2019

Мы устанавливаем уровень согласованности, LOCAL_QUORUM по умолчанию.Мы используем это во время сборки кластера в конфигурации -

Cluster.builder().addContactPoints(environment.getProperty("cassandra.contact-points").split(",")).withPort(port)
                    .withQueryOptions(
                            new QueryOptions().setConsistencyLevel(ConsistencyLevel.valueOf(environment.getProperty("cassandra.consistency-level")))
                                    .setSerialConsistencyLevel(ConsistencyLevel.valueOf(environment.getProperty("cassandra.consistency-level"))))
                    .withAuthProvider(new DsePlainTextAuthProvider(environment.getProperty("cassandra.username"),
                            environment.getProperty("cassandra.password")));

И в файле application.properties мы предоставляем уровень согласованности как -

cassandra.consistency-level=LOCAL_QUORUM

Теперь мы неЯ не хочу использовать LOCAL_QUORUM для некоторых запросов.Для этого мы создали собственный репозиторий, как описано в Здесь .

Мы представили метод сохранения с WriteOptions в пользовательском репозитории -

@NoRepositoryBean
public interface CustomizedUserRepository<T> {
    <S extends T> S save( S entity, ConsistencyLevel consistencyLevel);
}

И его реализация -

public class UserRepositoryImpl implements CustomizedUserRepository<User> {

    @Autowired
    CassandraOperations cassandraOperations;

    @Override
    public <S extends User> S save( S entity, ConsistencyLevel consistencyLevel) {
        WriteOptions writeOptions = WriteOptions.builder().consistencyLevel(consistencyLevel).build();
        cassandraOperations.insert(entity, writeOptions);
        return entity;
    }
}

И, называя это в классе обслуживания как -

@Override
    public User createUser( User user) {
        return userRepository.save(user, ConsistencyLevel.ONE);
    }

Работает отлично.

Теперь вопрос в том, будет ли эта реализация переопределять стандартное значение (локальный кворум) для сохранения функциональности пользователя?Как мне убедиться, что это работает как -

  1. Для saveUser () Уровень согласованности равен ОДИН
  2. Для других запросов Уровень согласованности равен Локальному кворуму

Мы попытались зарегистрировать QueryLogger в кластере, чтобы проверить, можем ли мы видеть информацию об уровне согласованности в журналах, но он печатает только запросы.

...