文档章节

Vert.x Blueprint 系列教程(二) | Vert.x Kue 教程(Web部分)

sczyh30
 sczyh30
发布于 2016/07/26 11:27
字数 953
阅读 327
收藏 0

上部分蓝图教程中我们一起探索了如何用Vert.x开发一个基于消息的应用。在这部分教程中,我们将粗略地探索一下kue-http模块的实现。

Vert.x Kue REST API

kue-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就呈现在我们眼前啦!

Vert.x Kue UI


My Blog: 「千载弦歌,芳华如梦」 - sczyh30's blog

© 著作权归作者所有

sczyh30
粉丝 4
博文 2
码字总数 14507
作品 0
青岛
程序员
私信 提问
Vert.x Blueprint 系列教程(二) | 开发基于消息的应用 - Vert.x Kue

Vert.x 蓝图项目已经发布至Vert.x官方网站:Vert.x Blueprint Tutorials 本文章是 Vert.x 蓝图系列 的第二篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待办事项服务开发教程 Vert.x B...

sczyh30
2016/07/26
816
0
Vert.x入坑须知(4.1):用Spock写异步测试

点进来的老读者可能会对系列的数字感到奇怪:为何不是5而是4.1?实话是,本篇内容足够重要,可以算得上入坑必须了解的内容。但从篇幅上来讲它实在又有点单薄,而我最近也没时间憋个大招去写长...

胡键
2018/12/29
0
0
Vert.x入坑须知(3)

随着Vert.x进化到3.5.0,本系列也迎来了新篇章。 CORS的新变化 对于CORS,搞Web开发(不论你是前端,还是后端)的同志应该不陌生,尤其是如今微服务盛行的时代,CORS更是最常用的配置项之一。...

胡键
2017/12/03
0
0
使用Vert.x构建Web服务器和消息系统

Vert.x亮点 Vert.x应用程序是事件驱动,异步和单线程的。 Vert.x过程通过事件总线,这是Vert.x的事件驱动架构的内置一块通信。 结合异步处理,单线程组件和事件总线产生高度的可扩展性,并编...

力谱宿云
2016/06/20
2.4K
0
Vert.X 入门手记 (一) 介绍

Vert.X 中文站:vertx.tk(临时域名) 目前中文化正在进行中,有人来帮忙否?? QQ交流群:219655467 介绍 Vert.X是一个异步网络应用开发框架,用来开发高并发、异步、可伸缩、多语言支持的Web...

Vity
2014/03/04
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何使用Selenium WebDriver截屏

有谁知道是否可以使用Selenium WebDriver截屏? (注:不是硒RC) #1楼 吉顿 import org.openqa.selenium.OutputType as OutputTypeimport org.apache.commons.io.FileUtils as FileUtils......

技术盛宴
27分钟前
4
0
高阶函数

定义:能够包装函数的,使原本函数增加一些额外的福利的函数 比如: function higherOrderFn(fn){} 能够对fn增加一些额外的福利 应用场景: (function () { var getLogin = functio...

gtandsn
33分钟前
9
0
架构师成长之后

小致Daddy
34分钟前
6
0
Git 介绍和日常命令

git 介绍 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。 GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理...

郭靖Michael
今天
9
0
技巧以管理R会话中的可用内存

人们使用什么技巧来管理交互式R会话的可用内存? 我使用下面的函数(基于Petr Pikal和David Hinds在2004年r-help列表中的发布)列出(和/或排序)最大的对象,并偶尔对其中一些对象进行rm() ...

javail
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部