【问题标题】:creating a mongodb healthcheck (in dropwizard)创建一个 mongodb 健康检查(在 dropwizard 中)
【发布时间】:2016-10-30 06:45:58
【问题描述】:

不一定特定于 dropwizard,但对于我来说,我无法弄清楚如何轻松地为 mongodb 创建健康检查。这是java中的,使用的是mongodb自带的java驱动的3.3.0版本。

我希望有一种方法在成功时不会更改数据库的状态,但在查询(或连接或其他)失败时也会抛出异常以返回健康或不健康状态.理想情况下,我会执行find,但据我所知,这不会引发异常。

【问题讨论】:

  • 您想通过健康检查检查什么?
  • 您只是想对服务器执行 ping 操作吗?或者检查Mongo进程是否正在运行,端口是否可达?
  • 我想验证我们是否可以连接并执行查询,因此请确保它是可访问的并且我们已通过身份验证使用它 - 基本上确保我的应用程序所依赖的东西在那里。

标签: java mongodb dropwizard


【解决方案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
}

【讨论】:

  • getDb 在我使用的版本中已被弃用,mongoClient.getDatabase("database").listCollectionNames(); 似乎没有抛出任何异常。
  • 好吧,请用你的方式打开数据库连接。 MongoException 是运行时的,所以不需要捕获它:api.mongodb.com/java/2.3/com/mongodb/MongoException.html
  • 我刚刚在杀死我的mongodb进程后测试了这段代码,没有抛出异常:@Override protected Result check() { try { mongoClient.getDatabase("database").listCollectionNames(); } catch (Exception e) { log.error("mongo db down: {}", e.getMessage()); return Result.unhealthy("无法列出集合"); } 返回 Result.healthy();我也尝试捕捉“MongoException”和“RuntimeException”,不行。
  • 也许我们应该通过列表...我在答案中添加了打印语句。如果您在断开连接后打印它们,您会看到什么?
  • 奇怪。迭代实际条目似乎会有所不同。我刚刚回顾了这些场景:gist.github.com/jayceekay/59f61e875fd658519dede2255605cce9。不过,您的回答在很大程度上给了我想要的效果,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 2015-10-27
  • 2016-10-16
  • 2014-08-12
  • 2014-10-02
  • 2021-09-13
相关资源
最近更新 更多