如何在Web服务器/应用程序服务器上部署Verticle?

时间:2019-09-28 10:17:56

标签: vert.x


我才刚刚开始学习Vert.x以及如何编写Verticles。我想知道从应用程序服务器或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());
  }
}

显然,主要方法需要由Application Server提供的任何触发器的某些ContextListener代替。是否有意义或在此上下文中不应该使用Vert.x? 谢谢

1 个答案:

答案 0 :(得分:0)

在我的POV中,将Vert.x用作Tomcat应用程序中的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 }

  //...
}