Мое приложение, сервер API, считается следующим:
MainVerticle
вызывается при запуске и должен создавать все необходимые объекты для работы приложения. В основном это пул соединений mongoDB (MongoClient.createShared(...)
) и объект глобальной конфигурации, доступный для всего экземпляра. Он также запускает прослушиватель HTTP, несколько экземпляров HttpVerticle
.
HttpVerticle
отвечает за прием запросов и, основываясь на команде xxx
в полезной нагрузке, выполняет метод XxxHandler.handle(...)
.
Большинству методов XxxHandler.handle(...)
потребуется доступ к базе данных. Кроме того, некоторые другие также развернут дополнительные статьи с параметрами из глобального conf. Например, LoginHandler.handle(...)
развернет статью, чтобы сохранить состояние пользователя, пока он подключен, и эта статья будет отменена при выходе пользователя из системы.
Я не могу понять, как получить объект глобальной конфигурации, находясь в XxxHandler.handle(...)
или в "sub" -витерине То же самое для клиента Монго.
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 : Наконец, как сделать экземпляр клиента Монго доступным для всех вершин?