我的应用程序,一个 API 服务器,被认为是按如下方式组织的:
MainVerticle
在启动时调用,应该为应用程序工作创建所有必要的对象。主要是一个 mongoDB 连接池 (MongoClient.createShared(...)
) 和一个在实例范围内可用的全局配置对象。它还启动 HTTP 侦听器,一个HttpVerticle
.HttpVerticle
负责接收请求,根据xxx
payload中的命令执行XxxHandler.handle(...)
方法。大多数
XxxHandler.handle(...)
方法都需要访问数据库。此外,其他一些人还将使用来自全局 conf 的参数部署额外的 verticles。例如LoginHandler.handle(...)
,将部署一个 verticle 以在他连接时保持用户状态,并且当用户注销时,该 verticle 将被取消部署。
我不知道如何在“子”-verticle 中XxxHandler.handle(...)
或在“子”-verticle 中获取全局配置对象。对于 mongo 客户端也是如此。
Q1:对于配置数据,我尝试使用SharedData
. 在 `MainVerticle.start() 我有:
LocalMap<String, String> lm = vertx.sharedData().getLocalMap("conf");
lm.put("var", "val");
在 `HttpVerticle.start() 我有:
LocalMap<String, String> lm = vertx.sharedData().getLocalMap("conf");
log.debug("var={}", lm.get("var"));
但日志输出是var=null
....我做错了什么?
Q2:除了这个带有<String, String>
地图类型的基本示例之外,如果该值是一个可变对象JsonObject
,就像我真正需要的那样怎么办?
Q3:最后如何让mongo客户端的实例对所有的verticles可用?