2012-04-20 5 views
12

Для мониторинга операций моего приложения, я ищу что-то подобное обычно используемую «проверку соединения SQL» запросомПроверка работоспособности соединения Cassandra (с использованием hector)?

ВЫБРАТЬ 1;

в Кассандре, используя драйвер Гектора. Я пробовал такие вещи, как просмотр Cluster.getKnownPoolHosts() и .getConnectionManager(). GetActivePools(). Но кажется, что их статус не постоянно обновляется, только когда я на самом деле пытаюсь получить доступ к Cassandra с запросом.

Я бы хотел, чтобы моя проверка работоспособности была независимой от любых ключей или пользовательских CF, которые должны существовать, поэтому просто запустить «фиктивный» запрос кажется трудным (против чего?). И, конечно, это не должно занимать много памяти или создавать значительную нагрузку.

Могу ли я заставить Hector каким-то образом обновить свой статус пула соединений без выполнения реального запроса?

(BTW: CQL даже не принимать «SELECT 1» в качестве действительного запроса.)

+0

Вы нашли ответ на этот вопрос? Я пытаюсь сделать то же самое –

+0

Да, я нашел подход, который, кажется, хорошо работает для меня. См. Ответ ниже. – HansMari

ответ

4

Решение, которое я сейчас использую, и которые, как представляется, наиболее надежным до сих пор (протестировано с Кассандрой 1.1 и 1,2) представляет собой простой запрос на «систему»:

Query<String> query = Query.selectQuery("*", "system", null, 1, consistencyLevel, StringSerializer.get());

это не совсем то, что я хотел, так как это «реальный» запрос, но с другой стороны, это не дает каких-либо ложных срабатываний.

+0

Я мог ошибаться, но я думаю, что этот подход будет всегда вызывать один и тот же узел (ы) - в зависимости от константы, которую вы будете вызывать всегда 1, Q или Все узлы вашего RF. Если вы хотите, чтобы монитор был активным, вы можете это сделать, если вы хотите контролировать статус звонка, я бы использовал nodetool внутри вашего приложения java. –

+1

Это предназначено для проверки соединения, а не как проверка операций кластера Cassandra. – HansMari

+0

@ ХансМари, как на самом деле вы делаете эту проверку? Вы проверяете некоторые свойства запроса? – CAMOBAP

13

С CQL3, я использую следующий запрос:

SELECT now() FROM system.local; 

Было бы хорошо, чтобы избавиться от ЕКА altogther сделать это родовым, в случае, если пользователь не имеет доступ к system keypace или local. Но, как и в случае с другими ответами, по крайней мере, это не должно давать ложных срабатываний.

+0

Как вы делаете эту проверку? Вы поймаете какое-то исключение или изучите объект QuerryResult? – CAMOBAP

+0

Да, просто проверяя, что это не исключение. Можно также проверить, что запрос действительно что-то возвращает, но я нашел это ненужным. –