2016-10-29 3 views
1

Не обязательно специфический для dropwizard, но для жизни меня я не могу понять, как легко создать проверку здоровья для mongodb. Это в java, используя версию 3.3.0 собственного java-драйвера mongodb.создание mododb healthcheck (в dropwizard)

Я надеялся, что будет существовать метод, который не изменит состояние базы данных, если он преуспеет, но также выбрасывает исключение, когда запрос (или соединение или что-то другое) терпит неудачу, чтобы вернуть здоровье или нездоровое государство. В идеале я бы выполнил find, но это не бросает исключение, насколько я могу судить.

+0

Что вы хотите проверить с вашим Healthcheck? – ruhungry

+0

Вы просто хотите выполнить пинг на сервере? Или проверить, работает ли Mongo-процесс, и доступен ли порт? –

+0

Я хочу проверить, что мы можем подключаться и выполнять запросы, поэтому убедитесь, что они доступны, и что мы аутентифицированы для работы с ним - в основном убедитесь, что мое приложение зависит от этого. – Justin

ответ

1

Я бы просто перечислить все коллекции в базе данных, как:

MongoClient client = new MongoClient(addr, opts); 
MongoDatabase db = client.getDatabase(database); 
try { 
    MongoIterable<String> allCollections = db.listCollectionNames(); 
    for (String collection : allCollections) { 
     System.out.println("MongoDB collection: " + collection); 
    } 
} catch (Exception me) { 
    // problems with mongodb 
} 
+0

'getDb' устарел в версии, которую я использую, и' mongoClient.getDatabase ("database"). ListCollectionNames(); 'похоже, не бросает никаких исключений. – Justin

+0

Ну, пожалуйста, используйте способ открытия соединения с базой данных. И MongoException - это среда исполнения, поэтому не требуется ее улавливать: http://api.mongodb.com/java/2.3/com/mongodb/MongoException.html – rsutormin

+0

Я только что протестировал этот код после убийства моего процесса mongodb, никаких исключений не было: @Override protected Проверка результатов() { try { mongoClient.getDatabase ("database"). ListCollectionNames(); } catch (Исключение e) { log.error ("mongo db down: {}", e.getMessage()); return Result.unhealthy («Невозможно перечислить коллекции»); } return Result.healthy(); } Я попытался поймать «MongoException» и «RuntimeException», а не пойти. – Justin