有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Vert。x的Verticle JSON/YAML配置(每个环境最好)

是否有一种“合理”的方式来配置deployment optionsinstancesworker等Vert。x

我希望能够在部署时“摆脱”DeploymentOptions,并将其保存在JSON/YAML配置文件中。x理解——最好按“环境”来划分,就像Spring Boot一样

这就是我目前正在使用的:

class MainVerticle : AbstractVerticle() {
  private val logger: Logger = LoggerFactory.getLogger(this.javaClass.name)

  override fun start(future: Future<Void>) {
    val config = config().getJsonObject("verticle_instances")
    deploy(AuthVerticle::class.java, DeploymentOptions().setInstances(config.getInteger("auth_instances")))
    deploy(HttpServerVerticle::class.java, DeploymentOptions().setConfig(config().getJsonObject("http_server_verticle"))
        .setInstances(config.getInteger("http_server_instances")))
    deploy(DialPadVerticle::class.java, DeploymentOptions().setConfig(config().getJsonObject("phone_verticle"))
        .setWorker(true))
    logger.info("Module(s) and/or verticle(s) deployment...DONE")
    future.complete()
  }

  override fun stop(future: Future<Void>) {
    logger.debug("Undeploying verticle(s)...DONE")
    logger.info("Application stopped successfully. Enjoy the elevator music while we're offline...")
    future.complete()
  }

  private fun deploy(clazz: Class<out AbstractVerticle>, options: DeploymentOptions) {
    vertx.deployVerticle(clazz.name, options) { handler ->
      if (handler.succeeded()) {
        logger.debug("${clazz.simpleName} started successfully (deployment identifier: ${handler.result()})")
      } else {
        logger.error("${clazz.simpleName} deployment failed due to: ${handler.cause()}")
        //stop();
      }
    }
  }
}

。。。和config.json

{
  "verticle_instances": {
    "auth_instances": 3,
    "http_server_instances": 6
  },
  "http_server_verticle": {
    "hostname": "0.0.0.0",
    "port": 9080,
    "cert_path": "server-cert.pem",
    "key_path": "server-key.pem",
    "use_alpn": true,
    "use_ssl": true
  }
}

共 (1) 个答案

  1. # 1 楼答案

    据我所知,没有。但是,您可以对config.jsondeploy(Class, DeploymentOptions)方法进行一些调整,以获得类似的结果

    对于config.json,如果您将每个垂直体的名称更改为限定类名,并且每个垂直体都有一个deployment_options对象,那么您可以修改deploy()以加载选项,而无需在start方法中指定它们。在垂直方向。x、 您可以提供默认配置选项,以便执行以下操作:

    override fun start(future: Future<Void>) {
        deploy(AuthVerticle::class.java)
        deploy(HttpServerVerticle::class.java)
        deploy(DialPadVerticle::class.java)
        ...
    }
    
    private fun deploy(clazz: Class<out AbstractVerticle>) {
        val options = getDeploymentOptionsFromConfig(clazz)
        vertx.deployVerticle(clazz.name, options) { handler ->
            ...
        }
    }
    
    private fun getDeploymentOptionsFromConfig(clazz: Class<out AbstractVerticle>): DeploymentOptions {
        val config = config()
                .getJsonObject(clazz.name)
                .getJsonObject("deployment_options")
    
        return DeploymentOptions()
                .setInstances(config.getInteger("instances", 1))
                .setWorker(config.getBoolean("worker", false))
    }