2013-06-19 26 views
5

Szukam najlepszego sposobu na sprawdzenie połączenia z Mongo DB. Sytuacja: klient wysyła żądanie (api) na serwer. Serwer zwraca stan wszystkich baz danych.MongoDB: sprawdź połączenie z DB

Jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

2

Jeśli dobrze rozumiem pytanie chcesz uzyskać stan zwracany przez wywołanie usługi sieci Web. Możesz napisać funkcję, która wywołuje db.serverStatus() i zwróci dane. Sprawdź dokumentację tutaj:

Monitoring for MongoDB

5

Używam tego:

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

W Java MongoDriver 3.3.0 użytku ServerMonitorListener celu ustalenia, czy serwer jest podłączony i czy nie. Oto przykładowy kod,

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

Dobrze, szukam miejsca, w którym mógłbym zadeklarować takiego słuchacza w nowym sterowniku asynchronicznym ... . MongoClientOptions wydaje się być zastąpiony MongoClientSettings, który nie ma addServerMonitorListener() – Antonin

2

Polecenie ping jest no-op wykorzystywane do testowania, czy serwer odpowiada na polecenia. To polecenie natychmiast powróci, nawet jeśli serwer jest zablokowany:

 try{ 

      DBObject ping = new BasicDBObject("ping", "1"); 
      mongoTemplate.getDb().getMongo().getDB("DATABASE NAME"").command(ping); 
     } catch (Exception exp){ 
      // MongoDb is down.. 
     } 
Powiązane problemy