2013-06-19 3 views
5

Я ищу лучший способ проверить подключение к Mongo DB. Ситуация: клиент делает запрос (api) на сервер. И сервер возвращает статус всех баз данных.MongoDB: проверьте соединение с DB

Какой лучший способ это сделать?

ответ

1

Использование MongoClient для Java, всю информацию вам нужно здесь ...

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/

+1

Это работает для меня. Но странный мой объект БД не имеет метода serverStatus(). – Lugaru

+0

@Lugaru 'db.serverStatus()' является командой оболочки, а не частью Java-драйвера MongoDB – Huber

2

Если я правильно понимаю ваш вопрос вы хотите получить состояние возвращается через вызов веб-службы. Вы можете написать функцию, которая вызывает db.serverStatus() и вернуть ее. Проверьте документацию здесь:

Monitoring for MongoDB

5

Я использую это:

Builder o = MongoClientOptions.builder().connectTimeout(3000); 
MongoClient mongo = new MongoClient(new ServerAddress("192.168.0.1", 3001), o.build());  

try { 
    mongo.getAddress(); 
} catch (Exception e) { 
    System.out.println("Mongo is down"); 
    mongo.close(); 
    return; 
} 
5

В Java MongoDriver 3.3.0 использования ServerMonitorListener, чтобы определить, является ли сервер и подключен или нет. Вот пример кода,

public class ServerConnection implements ServerMonitorListener { 
    private MongoClient client; 

    public ServerConnection(){ 
     try { 
      MongoClientOptions clientOptions = new MongoClientOptions.Builder() 
       .addServerMonitorListener(this) 
       .build(); 

      client = new MongoClient(new ServerAddress("localhost", 27017), clientOptions); 
     } catch (Exception ex) { 

     } 
    } 

    @Override 
    public void serverHearbeatStarted(ServerHeartbeatStartedEvent serverHeartbeatStartedEvent) { 
     // Ping Started 
    } 

    @Override 
    public void serverHeartbeatSucceeded(ServerHeartbeatSucceededEvent serverHeartbeatSucceededEvent) { 
     // Ping Succeed, Connected to server 
    } 

    @Override 
    public void serverHeartbeatFailed(ServerHeartbeatFailedEvent serverHeartbeatFailedEvent) { 
     // Ping failed, server down or connection lost 
    } 
} 
+0

Хорошо, я ищу место, где я мог бы объявить такого слушателя в новом java async-драйвере mongodb ... пока не найдено , MongoClientOptions, похоже, заменяется MongoClientSettings, у которого нет addServerMonitorListener() – Antonin

2

Команда пинг является не-оп используется для проверки, является ли сервер отвечает на команды. Эта команда немедленно вернется, даже если сервер заблокирован от записи:

 try{ 

      DBObject ping = new BasicDBObject("ping", "1"); 
      mongoTemplate.getDb().getMongo().getDB("DATABASE NAME"").command(ping); 
     } catch (Exception exp){ 
      // MongoDb is down.. 
     } 
Смежные вопросы