Vert.x 3学习笔记---02

文档地址: http://vertx.io/docs/vertx-core/java/

Verticles

verticles是一个很重要的概念。你可以将verticles当做是Actor Model(一种编程模型)中的actor。它是一段代码的集合—可以部署和被Vert.x运行。并且verticles能够被Vert.x支持的所有语言编写,并不仅限于java。一个应用可以包含不同语言编写的verticles。所有的verticles之间通过event bus进行交换数据。

Writing Verticles

所有编写的Verticle类都必须继承Verticle接口。为了方便,一般情况下我们可以继承AbstractVerticle。如下代码:

public class MyVerticle extends AbstractVerticle {
   

  // Called when verticle is deployed
  public void start() {
  }

  // Optional - called when verticle is undeployed
  public void stop() {
  }

}

当verticle部署运行时,会调用start方法;当start方法运行完后,就认为verticle已经启动。当verticle卸载时,会调用stop方法;当stop方法运行完成后,就认为verticle已经卸载。

Asynchronous Verticle start and stop

如果你需要在verticle的start方法中执行比较耗费时间的操作时,你不能为了等待其部署,而去阻塞。这样就违背了黄金原则。那么我们应该怎么做呢?

public class MyVerticle extends AbstractVerticle {
   

  public void start(Future<Void> startFuture) {
    // Now deploy some other verticle:

    vertx.deployVerticle("com.foo.OtherVerticle", res -> {
      if (res.succeeded()) {
        startFuture.complete();
      } else {
        startFuture.fail();
      }
    });
  }
}

如上代码所示,我们可以继承异步的start方法(多一个startFuture参数)。例子中展示的是我们在一个verticle的start方法中启动另一个verticle。
相对应的stop方法也有异步的实现,如下代码:

public class MyVerticle extends AbstractVerticle {
   

  public void start() {
    // Do something
  }

  public void stop(Future<Void> stopFuture) {
    obj.doSomethingThatTakesTime(res -> {
      if (res.succeeded()) {
        stopFut
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值