摘要:上部分蓝图教程中我们一起探索了如何用开发一个基于消息的应用。对部分来说,如果看过我们之前的蓝图待办事项服务开发教程的话,你应该对这一部分非常熟悉了,因此这里我们就不详细解释了。有关使用实现的教程可参考蓝图待办事项服务开发教程。
上部分蓝图教程中我们一起探索了如何用Vert.x开发一个基于消息的应用。在这部分教程中,我们将粗略地探索一下kue-http模块的实现。
Vert.x Kue REST APIkue-http模块中只有一个类KueHttpVerticle,作为整个REST API以及UI服务的实现。对REST API部分来说,如果看过我们之前的 Vert.x 蓝图 | 待办事项服务开发教程 的话,你应该对这一部分非常熟悉了,因此这里我们就不详细解释了。有关使用Vert.x Web实现REST API的教程可参考 Vert.x 蓝图 | 待办事项服务开发教程。
将Kue UI与Vert.x Web进行适配除了REST API之外,我们还给Vert.x Kue提供了一个用户界面。我们复用了 Automattic/Kue 的用户界面所以我们就不用写前端代码了(部分API有变动的地方我已进行了修改)。我们只需要将前端代码与Vert.x Web适配即可。
首先,前端的代码都属于静态资源,因此我们需要配置路由来允许访问静态资源:
router.route().handler(StaticHandler.create(root));
这样我们就可以直接访问静态资源咯~
注意到Kue UI使用了Jade(最近貌似改名叫Pug了)作为模板引擎,因此我们需要一个Jade模板解析器。好在Vert.x Web提供了一个Jade模板解析的实现: io.vertx:vertx-web-templ-jade,所以我们可以利用这个实现来渲染UI。首先在类中定义一个JadeTemplateEngine并在start方法中初始化:
engine = JadeTemplateEngine.create();
然后我们就可以写一个处理器方法来根据不同的任务状态来渲染UI:
private void render(RoutingContext context, String state) { final String uiPath = "webroot/views/job/list.jade"; // (1) String title = config().getString("kue.ui.title", "Vert.x Kue"); kue.getAllTypes() .setHandler(resultHandler(context, r -> { context.put("state", state) // (2) .put("types", r) .put("title", title); engine.render(context, uiPath, res -> { // (3) if (res.succeeded()) { context.response() .putHeader("content-type", "text/html") // (4) .end(res.result()); } else { context.fail(res.cause()); } }); })); }
首先我们需要给渲染引擎指定我们前端代码的地址 (1)。然后我们从Redis中获取其中所有的任务类型,然后向解析器context中添加任务状态、网页标题、任务类型等信息供渲染器渲染使用 (2)。接着我们就可以调用engine.render(context, path, handler)方法进行渲染 (3)。如果渲染成功,我们将页面写入HTTP Response (4)。
现在我们可以利用render方法去实现其它的路由函数了:
private void handleUIActive(RoutingContext context) { render(context, "active"); }
然后我们给它绑个路由就可以了:
router.route(KUE_UI_ACTIVE).handler(this::handleUIActive);
是不是非常方便呢?不仅如此,Vert.x Web还提供了其它各种模板引擎的支持,比如 FreeMaker, Pebble 以及 Thymeleaf 3。如果感兴趣的话,你可以查阅官方文档来获取详细的使用指南。
展示时间!是不是等不及要看UI长啥样了?现在我们就来展示一下!首先构建项目:
gradle build
kue-http需要kue-core运行着(因为kue-core里注册了Event Bus服务),因此我们先运行kue-core,再运行kue-http。不要忘记运行Redis:
redis-server java -jar kue-core/build/libs/vertx-blueprint-kue-core.jar -cluster -ha -conf config/config.json java -jar kue-http/build/libs/vertx-blueprint-kue-http.jar -cluster -ha -conf config/config.json
为了更好地观察任务处理的流程,我们再运行一个示例:
java -jar kue-example/build/libs/vertx-blueprint-kue-example.jar -cluster -ha -conf config/config.json
好啦!现在在浏览器中访问http://localhost:8080,我们的Kue UI就呈现在我们眼前啦!
My Blog: 「千载弦歌,芳华如梦」 - sczyh30"s blog
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64954.html
摘要:本文章是蓝图系列的第二篇教程。这就是请求回应模式。好多属性我们一个一个地解释一个序列,作为的地址任务的编号任务的类型任务携带的数据,以类型表示任务优先级,以枚举类型表示。默认优先级为正常任务的延迟时间,默认是任务状态,以枚举类型表示。 本文章是 Vert.x 蓝图系列 的第二篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待办事项服务开发教程 Vert.x B...
摘要:本文章是蓝图系列的第一篇教程。是事件驱动的,同时也是非阻塞的。是一组负责分发和处理事件的线程。注意,我们绝对不能去阻塞线程,否则事件的处理过程会被阻塞,我们的应用就失去了响应能力。每个负责处理请求并且写入回应结果。 本文章是 Vert.x 蓝图系列 的第一篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待办事项服务开发教程 Vert.x Blueprint 系...
摘要:本教程是蓝图系列的第三篇教程,对应的版本为。提供了一个服务发现模块用于发布和获取服务记录。前端此微服务的前端部分,目前已整合至组件中。监视仪表板用于监视微服务系统的状态以及日志统计数据的查看。而服务则负责发布其它服务如服务或消息源并且部署。 本文章是 Vert.x 蓝图系列 的第三篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待办事项服务开发教程 Vert....
摘要:主要是避免引入太多的复杂性,并且出于灵活部署的需要。以应用为例,由于实际上是在上执行,若它被阻塞,即导致后续请求全部无法得到处理。因此,最合适的做法就是对于简单业务,采用异步库。本系列其他文章入坑须知入坑须知入坑须知 最开始觉得这个系列也就最多3篇了不起了(因为事不过三嘛),没曾想居然迎来了第四篇! Kotlin 由于最近决定投身到区块链的学习当中的缘故,出于更好的理解它的基本概念,自...
摘要:而不是开始,将服务使用多线程的请求重量级的容器。是启动多个轻便单线程的服务器和流量路由到他们。亮点应用程序是事件驱动,异步和单线程的。通过使用事件总线传递消息通信。为了建立一个消息系统,则需要获得该事件总线。 摘要 如果你对Node.js感兴趣,Vert.x可能是你的下一个大事件:一个建立在JVM上一个类似的架构企业制度。 这一部分介绍Vert.x是通过两个动手的例子(基于Vert.x...
阅读 2956·2021-09-10 10:50
阅读 3136·2019-08-30 14:19
阅读 3474·2019-08-29 17:31
阅读 3198·2019-08-29 16:43
阅读 2154·2019-08-29 14:05
阅读 2060·2019-08-29 13:17
阅读 2014·2019-08-26 13:25
阅读 1715·2019-08-26 12:20