步骤1:初始化vertx;

//根据配置文件生成vertx实例

public class VertXStarter {

public static Vertx vertx;
    @Getter
    private static String address;

public static void init() {
        Stopwatch stopwatch = Stopwatch.createStarted();
        log.info("[PowerJob] PowerJob's vert.x system start to bootstrap...");

Properties properties = PropertyUtils.getProperties();
        int port = Integer.parseInt(properties.getProperty(PowerJobServerConfigKey.HTTP_PORT, String.valueOf(OmsConstant.SERVER_DEFAULT_HTTP_PORT)));
        String portFromJVM = System.getProperty(PowerJobServerConfigKey.HTTP_PORT);
        if (StringUtils.isNotEmpty(portFromJVM)) {
            port = Integer.parseInt(portFromJVM);
        }
        String localIP = NetUtils.getLocalHost();

address = localIP + ":" + port;
        log.info("[PowerJob] vert.x server address: {}", address);

vertx = Vertx.vertx();

log.info("[PowerJob] PowerJob's vert.x system started successfully, using time {}.", stopwatch);
    }
}

步骤2:VertXStarter.vertx.deployVerticle(new WorkerRequestHttpHandler());

步骤3:WorkerRequestHttpHandler继承AbstractVerticle并实现start方法。

public class WorkerRequestHttpHandler extends AbstractVerticle {

@Override
    public void start() throws Exception {

Properties properties = PropertyUtils.getProperties();
        int port = Integer.parseInt(properties.getProperty(PowerJobServerConfigKey.HTTP_PORT, String.valueOf(OmsConstant.SERVER_DEFAULT_HTTP_PORT)));

//生成http服务

HttpServerOptions options = new HttpServerOptions();
        HttpServer server = vertx.createHttpServer(options);

//生成路由

Router router = Router.router(vertx);
        //告诉vertx请求时body里放参数
        router.route().handler(BodyHandler.create());
        router.post(ProtocolConstant.SERVER_PATH_HEARTBEAT)
                .handler(ctx -> {
                    WorkerHeartbeat heartbeat = ctx.getBodyAsJson().mapTo(WorkerHeartbeat.class);
                    fetchWorkerRequestHandler().processWorkerHeartbeat(heartbeat);
                    success(ctx);
                });
        router.post(ProtocolConstant.SERVER_PATH_STATUS_REPORT)
                .blockingHandler(ctx -> {
                    TaskTrackerReportInstanceStatusReq req = ctx.getBodyAsJson().mapTo(TaskTrackerReportInstanceStatusReq.class);
                    try {
                        fetchWorkerRequestHandler().processTaskTrackerReportInstanceStatus(req);
                        out(ctx, AskResponse.succeed(null));
                    } catch (Exception e) {
                        log.error("[WorkerRequestHttpHandler] update instance status failed for request: {}.", req, e);
                        out(ctx, AskResponse.failed(ExceptionUtils.getMessage(e)));
                    }
                });
        router.post(ProtocolConstant.SERVER_PATH_LOG_REPORT)
                .blockingHandler(ctx -> {
                    WorkerLogReportReq req = ctx.getBodyAsJson().mapTo(WorkerLogReportReq.class);
                    fetchWorkerRequestHandler().processWorkerLogReport(req);
                    success(ctx);
                });
        server.requestHandler(router).listen(port);
    }

private static void out(RoutingContext ctx, Object msg) {
        ctx.response()
                .putHeader(OmsConstant.HTTP_HEADER_CONTENT_TYPE, OmsConstant.JSON_MEDIA_TYPE)
                .end(JsonObject.mapFrom(msg).encode());
    }

private static void success(RoutingContext ctx) {
        out(ctx, ResultDTO.success(null));
    }
}

vertx使用路由步骤相关推荐

  1. 前端路由的概念与原理

    前端路由router的概念与原理 1. 什么是路由 路由(英文:router)就是对应关系. 2. SPA 与前端路由 SPA 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组件的展示与 ...

  2. Vue之单文件组件的数据传递,axios请求数据及路由router

    1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...

  3. Django(静态文件和Django应用和分布式路由)

    什么是静态文件 如:图片.css.js.音频.视频 静态文件配置 --settings.py中 1.配置静态文件的访问路径[该配置默认存在] STATIC_URL = '/static' 指定访问静态 ...

  4. Django(14)-应用及分布式路由

    Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...

  5. Django - 应用及分布式路由

    应用 应用在 Django 项目中 是一个独立的业务模块,可以包含自己的路由,视图,模板,模型 创建应用 步骤1 --创建 步骤2--注册 配置分布式路由 步骤1 - 主路由中调用 include 函 ...

  6. OSPF(三)OSPF域内路由

    文章目录 前言 预备知识 LSA :Link-State Advertisement LSA头部 LSA分类 Router LSA(路由器LSA) Router LSA描述P2P网络 Router L ...

  7. Django REST framework(十)路由集routers的使用

    Django REST framework(九)-视图集ViewSet.GenericViewSet.ModelViewSet.ReadOnlyModelViewSet_simpleyako的博客-C ...

  8. Packet Tracer - 研究直连路由

    Packet Tracer - 研究直连路由 目标 第 1 部分:研究 IPv4 直连路由 第 2 部分:研究 IPv6 直连路由 拓扑图 背景信息 本活动中的网络已配置. 您将登录路由器并使用 sh ...

  9. 实验二(1)-配置 IPv4 静态路由和默认路由

    目录 一.拓扑 二.地址分配 三.目标 第 1 部分:设置拓扑并初始化设备 第 2 部分:配置基本设备设置并验证连接 第 3 部分:配置静态路由 配置递归静态路由. 配置直连静态路由. 配置和删除静态 ...

最新文章

  1. IBM重磅开源Power芯片指令集?国产芯迎来新机遇?
  2. 小而美的个人博客——前端——about
  3. DCMTK:DcmDate,DcmTime和DcmDateTime类的测试程序
  4. 21种mysql_Mysql中,21个写SQL的好习惯,可以看一下
  5. 把左耳朵、史海峰等牛人引进饿了么,张雪峰是何许人也?
  6. [Java]Thinking in Java 练习2.12
  7. cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务
  8. python-数字数据类型-整数类型-浮点数类型-数据类型间的转换
  9. 如何插卡虚拟机 mysql_怎么在虚拟机中搭建mysql服务器
  10. 电切镜行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  11. ubuntu 14 配置vsftp
  12. 基于高频18000-3M3技术的RFID智能书架方案
  13. word2vec是如何得到词向量的?
  14. 断点续传实现文件下载进度条
  15. macOS如何格式化移动硬盘和U盘
  16. 电源设计经验之 MOS 管驱动电路
  17. NDoc: How to Make Good Use of Your XML Comments?
  18. 2011端午节搞笑短信大全
  19. 探索YoloV3源码
  20. 【历史上的今天】4 月 26 日:验证码的发明者诞生;切尔诺贝利病毒爆发;诺基亚收购 Withings

热门文章

  1. MySQL中的升序降序以及字段的升序降序
  2. php 根据父级id查出,php,_三级分类 like查询 查询到很多id 需要找到对应的父级id 并根据父级id组合 应该怎么根据父级id将数据组合在一起呢?,php - phpStudy...
  3. 二手MacBook笔记本回收数量的提升,也是用户环保意识的增强
  4. R循环有两个_量化金融R语言【入门五味】五味:函数
  5. Tokenview.io推出ETH 2.0信标链浏览器
  6. wchar_t的使用
  7. notifyDataSetChanged使用总结
  8. 阿里云,华为云哪个更好?
  9. win7系统笔记本架设无线热点(AP)
  10. canvas效果案例:安卓机器人