首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Luminus应用程序(MongoDB不可用)中检查Monger连接?

如何在Luminus应用程序(MongoDB不可用)中检查Monger连接?
EN

Stack Overflow用户
提问于 2021-03-20 16:14:04
回答 2查看 96关注 0票数 1

我正在学习Clojure (1.10),并正在使用Luminus框架(3.93)编写一个小型web应用程序,并使用Monger (3.1.0)连接到MongoDB实例。Luminus生成一些脚手架代码,即在<myproject>.db.core启动时创建数据库连接池(使用函数<myproject>.db.core)。

代码语言:javascript
复制
(ns myproject.db.core
  (:require [monger.core :as mg] ... ))

(defstate db*
  :start (-> env :database-url mg/connect-via-uri)
  :stop (-> db* :conn mg/disconnect))

...

My problem: --如果此时MongoDB实例不可用,则不会显示任何警告问题。网页是服务的,直到一个人需要调用一个蒙古人功能。此时,应用程序“搅动”,然后超时(设置为30)和异常/堆栈跟踪错误屏幕(这除了是一个可怕的用户体验,也可能公开的代码/数据,应该是保密的)。

当先决条件数据库不可用时,我如何才能最好地防止启动应用程序?

第一次尝试(不可否认是笨拙的)是在上面的启动代码中插入一个Monger调用。这将导致启动期间的超时异常(带有异常消息),而不是启动web应用程序。有什么更好的方法?

另外,您知道有一种方法可以让这样的问题停止启动过程而不是重新尝试和输出失败消息吗?

代码语言:javascript
复制
(defstate db*
  :start (-> env :database-url mg/connect-via-uri
             ; clumsy way to catch timeouts due to no database when starting up:
             (#(mg/get-db-names (:conn %)) %))
  :stop (-> db* :conn mg/disconnect))
EN

回答 2

Stack Overflow用户

发布于 2021-03-20 16:24:30

我不是蒙古人的专家,但是本指南在他们的网站上展示了改变超时的方法。

所以,也许可以将超时时间更改为3秒或什么的,这样您就可以连接起来了。否则,抛出和异常什么的。

票数 0
EN

Stack Overflow用户

发布于 2021-03-25 08:48:43

您可以尝试ping数据库以检查其可用性:

代码语言:javascript
复制
(mg/command db {:ping 1})

此外,您还可以创建一个调度程序(例如这里的)来定期检查db的状态

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66723774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档