【问题标题】:Vert.x. How to create a real polyglot JVM application?垂直x。如何创建一个真正的多语言 JVM 应用程序?
【发布时间】:2018-03-26 04:04:32
【问题描述】:

我正在检查Vert.x,这是一个可以以多种不同的 JVM 语言运行应用程序的框架。

vertx-examples 上提供了大量示例。

但问题是,(我还没有找到任何东西)我们如何以真正的多语言方式(同时使用所有受支持的 JVM 语言)编写 Vert.x 应用程序?

例如,我们如何编写使用以下文件的代码: Java.javaKotlin.ktJavascript.jsRuby.rb。 每个内部都有一个简单的函数来打印语言名称(例如 Ruby.rb 打印 ruby)。

例如,当使用这个输入时:

$vertx run Polyglot.java

我们如何才能实现以下输出?

java, kotlin, javascript, ruby

编辑,我的尝试:

Polyglot.java

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Launcher;

import java.lang.management.ManagementFactory;

public class Polyglot extends AbstractVerticle {

  public static void main(args: String[]) {
    Launcher.main(new String[] { "run", Polyglot.class.getName(), "-ha"});
  }

  @Override
  public void start() {

    vertx.createHttpServer().requestHandler(req -> {
      final String name = ManagementFactory.getRuntimeMXBean().getName();
      req.response().end(
        Java.message()
        + Kotlin.message()
      );
    }).listen(8080);
  }
}

Java.java

public class Java {

    public static String message() {
        return "Java\n";
    }
}

Kotlin.kt

class Kotlin {

    companion object {
        fun message() {
            return "Kotlin\n"
        }
    }
}

vertx run Polyglot.java

【问题讨论】:

  • 假设您已经尝试过,您遇到了哪个特定的障碍?

标签: java ruby jvm kotlin vert.x


【解决方案1】:

但你可以:)

方法如下:

  1. 在java中创建一个verticle
  2. 在JS中创建一个verticle
  3. 在 Kotlin 中创建一个顶点

现在要么在集群模式开启的情况下独立运行每个 verticle(因此 verticles 通过 eventbus 进行通信,这是所有语言的通用抽象),或者创建一个额外的 verticle 将所有 verticles 部署在同一个 JVM 中,然后再次使用 eventbus 来发送消息跨语言驱动开发。

【讨论】:

  • 嗯,那么,我们不能使用相同的基本代码吗?我对此的最终目标是使用例如 JRuby on Rails 和 Kotlin 以及 Spring Boot。你觉得这可能吗?
  • 视情况而定。例如,您可以在某种程度上混合搭配。假设您有一个 JS verticle,那么您可以依靠 nashorn 与 java 进行互操作,并且由于 kotlin 也可以从 java 中使用,您可以与 kotlin 进行交互。我没有提到红宝石,因为我不知道引擎的内部。这是一个带有 Java 的 JS 示例:jetdrone.xyz/2017/01/25/Vertx-Polyglot-Proxy-Services.html
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
相关资源
最近更新 更多