您的位置:首页 > 其它

Vertx3入门应用

2017-07-06 11:49 190 查看
github地址:https://github.com/vert-x3

2、获取配置文件

 private void getConfig(Future<JsonObject> future) {

    Vertx configVertx = Vertx.vertx();

    configVertx.fileSystem().readFile(configDir + File.separator + "config.json",

        res -> {

          if (res.succeeded()) {

            Buffer buf = res.result();

            JsonObject config = buf.toJsonObject();

            configVertx.close(re -> {

              if (re.succeeded()) {

                future.complete(config.getJsonObject("config"));

              } else {

                future.fail(re.cause());

              }

            });

          } else {

            future.fail(res.cause());

          }

     });

  }

3、创建vertx集群环境

private void createVertx(Future<Void> future) {

      VertxOptions options = new VertxOptions();

       options.setClustered(true);

       ClusterManager mgr = new ZookeeperClusterManager();

      options.setClusterHost("10.12.12.210");//本机zk地址

     options.setClusterPort(clusterPort);

     options.setClusterManager(mgr);

      Vertx.clusteredVertx(options, res -> {

        if (res.succeeded()) {

          vertx = res.result();

          future.complete();

        } else {

          future.fail(res.cause());

        }

      });

    

  }

4、注册一个编解码器到eventbus:主要用于实体传输时的编解码

 vertx.eventBus().registerDefaultCodec(Result.class, new ResultCodec());

 

5、部署verticle

private void deploy(String name, Handler<AsyncResult<String>> handler) {

    if (config != null) {

       DeploymentOptions deploymentOptions =

          new DeploymentOptions().setConfig(config).setInstances(1).setWorker(true);

      vertx.deployVerticle(name, deploymentOptions, result -> {

        if (result.succeeded()) {

          String deployId = result.result();

          handler.handle(Future.succeededFuture(deployId));

          System.out.println(name + " 部署成功 ");

        } else {

          handler.handle(Future.failedFuture(result.cause()));

          System.out.println(name + " 部署失败  " + result.cause().getMessage());

        }

      });

    } else {

      handler.handle(Future.failedFuture("Config is null"));

      log.error(name + " 部署失败 ");

    }

  }

ManageVerticle

public class ManageVerticle extends AbstractVerticle {

  protected Logger log = LoggerFactory.getLogger(this.getClass().getName());

  private JsonObject config;

  private ManageHandler manageHandler;

  private Router mainRouter;

  

  @Override

  public void init(Vertx vertx, Context context) {

    super.init(vertx, context);

    this.config = context.config();

   this.mainRouter = Router.router(vertx);

  }

  @Override

  public void start(Future<Void> future) {

    consumerListen();

    addMyRoute();

    future.complete();

  }

  @Override

  public void stop(Future<Void> future) {

    future.complete();

  }

  private void consumerListen() {

    vertx.eventBus().consumer("user-create", manageHandler()::create);

    vertx.eventBus().consumer("user-get", manageHandler()::get);

    vertx.eventBus().consumer("user-update", manageHandler()::update);

    vertx.eventBus().consumer("user-delete", manageHandler()::delete);

  }

  private void addMyRoute() {

    HttpServerOptions options = new HttpServerOptions();

    options.setPort(config().getInteger("http.port", 8081));

    HttpServer server = vertx.createHttpServer(options);

    server.requestHandler(configMainRouter()::accept);

    server.listen(result -> {

      if (result.succeeded()) {

       

        future.complete();

      } else {

       

        future.fail(result.cause());

      }

    });

  }

private Router configMainRouter() {

    mainRouter.route().failureHandler(ErrorHandler.create(true));

    /* Session / cookies for users */

    AuthProvider authProvider = MyAuthProvider.create(vertx, config);

    mainRouter.route().handler(CookieHandler.create());

    mainRouter.route().handler(

        SessionHandler.create(LocalSessionStore.create(vertx)).setNagHttps(false));

    mainRouter.route().handler(UserSessionHandler.create(authProvider));

     //二级子路由

  Router  subRouter = Router.router(vertx);

   subRouter.route(HttpMethod.POST, "/getuser").handler(

        new Dispatcher<Result>(MyRequestHandler()::getUser)::dispatchRequest);

    mainRouter.mountSubRouter("/manage/",subRouter);

    return mainRouter;

  }

  private ManageHandler manageHandler() {

    if (manageHandler == null) {

      manageHandler = new ManageHandler(vertx, config);

    }

    return manageHandler;

  }

}

ManageHandler

public class ManageHandler {

  protected Logger log = LoggerFactory.getLogger(this.getClass().getName());

  private Vertx vertx;

  private JsonObject config;

  private ManageDao dao;

  public ManageHandler(Vertx vertx, JsonObject config) {

    this.vertx = vertx;

    this.config = config;

    this.dao = new ManageDao(vertx, config);

  }

  //consumer

  public void getuser(Message<?> msg) {

    Future<JsonObject> future = Future.future();

    future.setHandler(r -> {

      if (r.succeeded()) {

        msg.reply(Result.succeedResult(r.result()));

      } else {

        msg.reply(Result.failResult("101", r.cause().getMessage()));

      }

    });

    JsonObject body = (JsonObject) msg.body();

    this.dao.getUserByAccount(body.getString("account"), r -> {

      if (r.succeeded()) {

        if (r.result() != null) {

          future.complete(r.result());

        } else {

          future.fail("账号不存在");

        }

      } else {

        future.fail("数据库错误:" + r.cause().getMessage());

      }

    });

  }

}

MyRequestHandler

public class MyRequestHandler{

  private Vertx vertx;

  private JsonObject config;

  

 public RobotRequestHandler(Vertx vertx, JsonObject config) {

    this.vertx = vertx;

    this.config = config;

  }

public void dispatchRequest(RoutingContext rc) {

    String userid = rc.request().getParam("userid");

    JsonObject body = rc.getBodyAsJson();

        JsonObject request = body.copy();

    this.dao.getUser("user", userid, r -> {

      if (r.succeeded() && r.result() != null) {

        JsonObject user = r.result();

        String username = user.getString("username");

    HttpServerRequest request=rc.request();

    HttpServerResponse response=rc.response();

        try {

         response.putHeader("Pragma", "no-cache");

         response.putHeader("Cache-Control", "no-cache");

         response.putHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");

         response.putHeader("Content-Type", contenttype + ";charset=UTF-8");

         response.end(user.toString());

        } catch (Throwable e) {

          rc.response().end(e.toString());

        } finally {

          

        }

      } else {

        rc.response().end();

      }

    });

  }

更多知识请参考  https://github.com/vert-x3

github地址:https://github.com/vert-x3

1、获取进程PID

[java] view plain copy 在CODE上查看代码片派生到我的代码片

String name = ManagementFactory.getRuntimeMXBean().getName();  

    String pid = name.split("@")[0];  

可以将它保存在文件中,用于动态停止进程

2、获取配置文件

[java] view plain copy 在CODE上查看代码片派生到我的代码片

private void getConfig(Future<JsonObject> future) {  

   Vertx configVertx = Vertx.vertx();  

   configVertx.fileSystem().readFile(configDir + File.separator + "config.json",  

       res -> {  

         if (res.succeeded()) {  

           Buffer buf = res.result();  

           JsonObject config = buf.toJsonObject();  

           configVertx.close(re -> {  

             if (re.succeeded()) {  

               future.complete(config.getJsonObject("config"));  

             } else {  

               future.fail(re.cause());  

             }  

           });  

         } else {  

           future.fail(res.cause());  

         }  

    });  

 }  

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  

3、创建vertx集群环境

[java] view plain copy 在CODE上查看代码片派生到我的代码片

private void createVertx(Future<Void> future) {  

      VertxOptions options = new VertxOptions();  

       options.setClustered(true);  

       ClusterManager mgr = new ZookeeperClusterManager();  

        options.setClusterHost("10.12.12.210");//本机zk地址  

         options.setClusterPort(clusterPort);  

         options.setClusterManager(mgr);  

      Vertx.clusteredVertx(options, res -> {  

        if (res.succeeded()) {  

          vertx = res.result();  

          future.complete();  

        } else {  

          future.fail(res.cause());  

        }  

      });  

      

  }  

4、注册一个编解码器到eventbus:主要用于实体传输时的编解码

[java] view plain copy 在CODE上查看代码片派生到我的代码片

vertx.eventBus().registerDefaultCodec(Result.class, new ResultCodec());  

5、部署verticle

[java] view plain copy 在CODE上查看代码片派生到我的代码片

private void deploy(String name, Handler<AsyncResult<String>> handler) {  

    if (config != null) {  

       DeploymentOptions deploymentOptions =  

          new DeploymentOptions().setConfig(config).setInstances(1).setWorker(true);  

      vertx.deployVerticle(name, deploymentOptions, result -> {  

        if (result.succeeded()) {  

          String deployId = result.result();  

          handler.handle(Future.succeededFuture(deployId));  

          System.out.println(name + " 部署成功 ");  

        } else {  

          handler.handle(Future.failedFuture(result.cause()));  

          System.out.println(name + " 部署失败  " + result.cause().getMessage());  

        }  

      });  

    } else {  

      handler.handle(Future.failedFuture("Config is null"));  

      log.error(name + " 部署失败 ");  

    }  

  }  

ManageVerticle

[java] view plain copy 在CODE上查看代码片派生到我的代码片

public class ManageVerticle extends AbstractVerticle {  

  protected Logger log = LoggerFactory.getLogger(this.getClass().getName());  

  

  private JsonObject config;  

  private ManageHandler manageHandler;  

  private Router mainRouter;  

    

  @Override  

  public void init(Vertx vertx, Context context) {  

    super.init(vertx, context);  

    this.config = context.config();  

     this.mainRouter = Router.router(vertx);  

  }  

  

  @Override  

  public void start(Future<Void> future) {  

    consumerListen();  

    addMyRoute();  

    future.complete();  

  }  

  

  @Override  

  public void stop(Future<Void> future) {  

    future.complete();  

  }  

  

  private void consumerListen() {  

    vertx.eventBus().consumer("user-create", manageHandler()::create);  

    vertx.eventBus().consumer("user-get", manageHandler()::get);  

    vertx.eventBus().consumer("user-update", manageHandler()::update);  

    vertx.eventBus().consumer("user-delete", manageHandler()::delete);  

  }  

  

  

  private void addMyRoute() {  

    HttpServerOptions options = new HttpServerOptions();  

    options.setPort(config().getInteger("http.port", 8081));  

    HttpServer server = vertx.createHttpServer(options);  

    server.requestHandler(configMainRouter()::accept);  

  

    server.listen(result -> {  

      if (result.succeeded()) {  

         

        future.complete();  

      } else {  

         

        future.fail(result.cause());  

      }  

    });  

  }  

private Router configMainRouter() {  

  

    mainRouter.route().failureHandler(ErrorHandler.create(true));  

    /* Session / cookies for users */  

    AuthProvider authProvider = MyAuthProvider.create(vertx, config);  

    mainRouter.route().handler(CookieHandler.create());  

    mainRouter.route().handler(  

        SessionHandler.create(LocalSessionStore.create(vertx)).setNagHttps(false));  

    mainRouter.route().handler(UserSessionHandler.create(authProvider));  

     //二级子路由  

    Router  subRouter = Router.router(vertx);  

     subRouter.route(HttpMethod.POST, "/getuser").handler(  

        new Dispatcher<Result>(MyRequestHandler()::getUser)::dispatchRequest);  

    mainRouter.mountSubRouter("/manage/",subRouter);  

  

    return mainRouter;  

  }  

  

  private ManageHandler manageHandler() {  

    if (manageHandler == null) {  

      manageHandler = new ManageHandler(vertx, config);  

    }  

    return manageHandler;  

  }  

  

}  

ManageHandler

[java] view plain copy 在CODE上查看代码片派生到我的代码片

public class ManageHandler {  

  protected Logger log = LoggerFactory.getLogger(this.getClass().getName());  

  private Vertx vertx;  

  private JsonObject config;  

  private ManageDao dao;  

  

  public ManageHandler(Vertx vertx, JsonObject config) {  

    this.vertx = vertx;  

    this.config = config;  

    this.dao = new ManageDao(vertx, config);  

  }  

  //consumer  

  public void getuser(Message<?> msg) {  

    Future<JsonObject> future = Future.future();  

    future.setHandler(r -> {  

      if (r.succeeded()) {  

        msg.reply(Result.succeedResult(r.result()));  

      } else {  

        msg.reply(Result.failResult("101", r.cause().getMessage()));  

      }  

    });  

    JsonObject body = (JsonObject) msg.body();  

    this.dao.getUserByAccount(body.getString("account"), r -> {  

      if (r.succeeded()) {  

        if (r.result() != null) {  

          future.complete(r.result());  

        } else {  

          future.fail("账号不存在");  

        }  

      } else {  

        future.fail("数据库错误:" + r.cause().getMessage());  

      }  

    });  

  }  

}  

MyRequestHandler

[java] view plain copy 在CODE上查看代码片派生到我的代码片

public class MyRequestHandler{  

  private Vertx vertx;  

  

  private JsonObject config;  

    

 public RobotRequestHandler(Vertx vertx, JsonObject config) {  

    this.vertx = vertx;  

    this.config = config;  

  }  

public void dispatchRequest(RoutingContext rc) {  

    String userid = rc.request().getParam("userid");  

      JsonObject body = rc.getBodyAsJson();  

        JsonObject request = body.copy();  

    this.dao.getUser("user", userid, r -> {  

      if (r.succeeded() && r.result() != null) {  

        JsonObject user = r.result();  

        String username = user.getString("username");  

        HttpServerRequest request=rc.request();  

        HttpServerResponse response=rc.response();  

        try {  

         response.putHeader("Pragma", "no-cache");  

         response.putHeader("Cache-Control", "no-cache");  

         response.putHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");  

         response.putHeader("Content-Type", contenttype + ";charset=UTF-8");  

         response.end(user.toString());  

        } catch (Throwable e) {  

          rc.response().end(e.toString());  

        } finally {  

            

        }  

      } else {  

        rc.response().end();  

      }  

    });  

    }  

更多知识请参考  https://github.com/vert-x3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vertx vertx3