如果我创建一个对Couchbase进行一些读写调用的路由,那么在vert.x web中实现它的正确方法是什么?通过使用handler()方法或blockingHandler()方法?
router.post("/some/path/").handler(routingContext -> {
// a few read write calls to Couchbase here.
});
也是同样的问题,但是在从Handlebars或Pebble等模板生成Web内容的背景下。使用handler()或blockingHandler()?
答案 0 :(得分:0)
这完全取决于您在处理程序中编写的代码类型。从第二个问题开始,所有模板引擎处理程序都实现了异步API(尽管加载模板本身是阻塞的,但由于缓存只执行一次)。在这种情况下,您应该使用:
router.post("/some/path/").handler(HandlebarsTemplateEngine.create());
回到第一个问题,如果你的couchbase客户端API阻塞,意味着它没有响应,它会阻止,直到你从服务器得到响应,那么在这种情况下你必须使用blockingHandler
或者你阻止事件循环,并通过扩展程序阻止整个应用程序。
但是,如果您使用的是couchbase异步API,则应使用handler
变体。有关如何使用异步API的示例,请参阅此博客post。