服务动态内容时使用Vert.x Web的正确方法是什么?



如果我创建了一条路由,该路由会在vert.x web中进行一些读取呼叫的读取呼叫,那么正确的方法是什么?通过使用Handler()方法或BlockingHandler()方法?

router.post("/some/path/").handler(routingContext -> {
  // a few read write calls to Couchbase here.
});

也是同样的问题,但在从模板(例如车把或鹅卵石)生成Web内容的上下文中。使用handler()或blockinghandler()?

这一切都取决于您在处理程序中编写的代码类型。首先从第二个问题开始,所有模板引擎处理程序都实现了异步API(尽管加载模板本身是阻塞的,但由于缓存而仅完成一次)。在这种情况下,您应该使用:

router.post("/some/path/").handler(HandlebarsTemplateEngine.create());

回到第一个问题,如果您的couchbase客户端API阻止了它,这意味着它没有响应,它确实会阻止,直到您从服务器中获得回复,则在这种情况下,您必须使用blockingHandler,否则您将阻止事件循环,并通过扩展屏蔽整个应用程序。

但是,如果您使用的是couchbase async api,则应使用handler变体。有关如何使用异步API的示例,请参见此博客文章。

最新更新