首页 > 解决方案 > 如何在 Web 服务器/应用服务器上部署 Verticle?

问题描述


我刚刚开始学习 Vert.x 以及如何编写 Verticle。我想知道从应用程序服务器或像 Tomcat 这样的 Web 服务器中部署 Verticle 是否有意义。例如:

public class HelloVerticle extends AbstractVerticle {
  private final Logger logger = LoggerFactory.getLogger(HelloVerticle.class);
  private long counter = 1;

  @Override
  public void start() {
    vertx.setPeriodic(5000, id -> {
      logger.info("tick");
    });

    vertx.createHttpServer()
      .requestHandler(req -> {
        logger.info("Request #{} from {}", counter++, req.remoteAddress().host());
        req.response().end("Hello!");
      })
      .listen(9080);
    logger.info("Open http://localhost:9080/");
  }

  public static void main(String[] args) {
    Vertx vertx = Vertx.vertx();
    vertx.deployVerticle(new HelloVerticle());
  }
}

显然,main 方法需要替换为 Application Server 提供的任何触发器的某个 ContextListener。它有什么意义还是不应该在这个上下文中使用 Vert.x?谢谢

标签: vert.x

解决方案


从我的 POV 来看,在 Tomcat 应用程序中使用 Vert.x 作为 Verticle 没有多大意义,因为它破坏了组件化的全部意义。

另一方面,您可能希望简单地连接到事件总线以发送/发布/接收消息,并且相当容易实现。

我是为一个 Grails(基于 SB)项目做的,并将 Vertx 的东西放在一个service类似的地方:

class VertxService {
  Vertx vertx

  @PostConstruct
  void init() {
    def options = [:]
    Vertx.clusteredVertx(options){ res ->
      if (res.succeeded())
        vertx = res.result()
       else
        System.exit( -1 )
    })
  }

  void publish( addr, msg ){ vertx.publish addr, msg }

  //...
}

推荐阅读