vertx使用路由步骤
步骤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使用路由步骤相关推荐
- 前端路由的概念与原理
前端路由router的概念与原理 1. 什么是路由 路由(英文:router)就是对应关系. 2. SPA 与前端路由 SPA 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组件的展示与 ...
- Vue之单文件组件的数据传递,axios请求数据及路由router
1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...
- Django(静态文件和Django应用和分布式路由)
什么是静态文件 如:图片.css.js.音频.视频 静态文件配置 --settings.py中 1.配置静态文件的访问路径[该配置默认存在] STATIC_URL = '/static' 指定访问静态 ...
- Django(14)-应用及分布式路由
Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...
- Django - 应用及分布式路由
应用 应用在 Django 项目中 是一个独立的业务模块,可以包含自己的路由,视图,模板,模型 创建应用 步骤1 --创建 步骤2--注册 配置分布式路由 步骤1 - 主路由中调用 include 函 ...
- OSPF(三)OSPF域内路由
文章目录 前言 预备知识 LSA :Link-State Advertisement LSA头部 LSA分类 Router LSA(路由器LSA) Router LSA描述P2P网络 Router L ...
- Django REST framework(十)路由集routers的使用
Django REST framework(九)-视图集ViewSet.GenericViewSet.ModelViewSet.ReadOnlyModelViewSet_simpleyako的博客-C ...
- Packet Tracer - 研究直连路由
Packet Tracer - 研究直连路由 目标 第 1 部分:研究 IPv4 直连路由 第 2 部分:研究 IPv6 直连路由 拓扑图 背景信息 本活动中的网络已配置. 您将登录路由器并使用 sh ...
- 实验二(1)-配置 IPv4 静态路由和默认路由
目录 一.拓扑 二.地址分配 三.目标 第 1 部分:设置拓扑并初始化设备 第 2 部分:配置基本设备设置并验证连接 第 3 部分:配置静态路由 配置递归静态路由. 配置直连静态路由. 配置和删除静态 ...
最新文章
- IBM重磅开源Power芯片指令集?国产芯迎来新机遇?
- 小而美的个人博客——前端——about
- DCMTK:DcmDate,DcmTime和DcmDateTime类的测试程序
- 21种mysql_Mysql中,21个写SQL的好习惯,可以看一下
- 把左耳朵、史海峰等牛人引进饿了么,张雪峰是何许人也?
- [Java]Thinking in Java 练习2.12
- cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务
- python-数字数据类型-整数类型-浮点数类型-数据类型间的转换
- 如何插卡虚拟机 mysql_怎么在虚拟机中搭建mysql服务器
- 电切镜行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- ubuntu 14 配置vsftp
- 基于高频18000-3M3技术的RFID智能书架方案
- word2vec是如何得到词向量的?
- 断点续传实现文件下载进度条
- macOS如何格式化移动硬盘和U盘
- 电源设计经验之 MOS 管驱动电路
- NDoc: How to Make Good Use of Your XML Comments?
- 2011端午节搞笑短信大全
- 探索YoloV3源码
- 【历史上的今天】4 月 26 日:验证码的发明者诞生;切尔诺贝利病毒爆发;诺基亚收购 Withings
热门文章
- MySQL中的升序降序以及字段的升序降序
- php 根据父级id查出,php,_三级分类 like查询 查询到很多id 需要找到对应的父级id 并根据父级id组合 应该怎么根据父级id将数据组合在一起呢?,php - phpStudy...
- 二手MacBook笔记本回收数量的提升,也是用户环保意识的增强
- R循环有两个_量化金融R语言【入门五味】五味:函数
- Tokenview.io推出ETH 2.0信标链浏览器
- wchar_t的使用
- notifyDataSetChanged使用总结
- 阿里云,华为云哪个更好?
- win7系统笔记本架设无线热点(AP)
- canvas效果案例:安卓机器人