温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用Next来开发的作用有哪些

发布时间:2021-10-19 15:07:53 来源:亿速云 阅读:173 作者:iii 栏目:编程语言

本篇内容介绍了“用Next来开发的作用有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Cloudopt Next 是一个非常轻量级且现代的、基于 Kotlin 编写的全栈开发框架,同时支持 Java 和 Kotlin,可以处理 Url 的解析,数据的封装,Json 的输出等等,从根本上减少开发时间、提升开发体验。

同时 Next 也是 Vert.x 及 awesome-kotlin 推荐项目。让我们来看看 Next 一些有趣的特点。

比如直接用 Vert.x 写路由的话是下面这样的写法:

router.route().handler(ctx -> {
 // This handler will be called for every request
 HttpServerResponse response = ctx.response();
 response.putHeader("content-type", "text/plain");
 // Write to the response and end it
 response.end("Hello World from Vert.x-Web!");
});

那么当你还要操作数据库的话,那么看起来就是一个回调嵌着一个回调,很容易形成回调地狱。

让我们看看在 Next 中如何实现一个简单的输出 Json 的路由:

@GET("json")
fun json() {
 var map = hashMapOf<String, Any>()
 map.put("a", 1)
 map.put("b", 2)
 renderJson(map)
}

在写法上完全不需要改变自己的习惯用传统的写法即可。甚至你还可以直接使用类似 spring boot 的参数注入的写法(结合 hibernate 的参数校验):

fun argsController(
 @Chinese(false)
 @Parameter("name", defaultValue = "Peter")
 name: String,
 @Min(18)
 @Parameter()
 age: Int  ) {
   var map = hashMapOf<String, Any>()
   map["name"] = name
   map["age"] = age
   renderJson(map)
}

而且在 Cloudopt Next 中支持多种异步写法,你可以选择自己喜欢写法自由发挥:

比如我们现在需要运行某个阻塞的代码并需要将结果传递回来,你可以用以下的方式运行。当然你也可以通过 Worker.worker 运行阻塞的代码。记得在结尾通过 handler.complete 传递结果。

fun test() {
   var id = worker<Int>({ handler ->
       handler.complete(1)
   }, { asyncResult ->
       //onComplete
   })
}

第二种做法是利用 kotlin 的协程的 await 特性,写起来会更为优雅。但利用 kotlin 协程需要在方法上声明 suspend。这也是我们推荐的异步写法。

suspend fun test() {
   var id = await<Int> { handler ->
       handler.complete(1)
   }
}

第三种情况是你在无法支持 suspend 语法的地方使用 await 语法。你可以使用下面的方式运行:

fun test() {
   global {
       var id = await<Int> { handler ->
           handler.complete(1)
       }
   }
}

第四种做法是你可以在路由的方法上增加 @Blocking 注解,使其自动变为普通的路由。

@Blocking
@GET("blocking")
fun blocking() {
   renderText("This is Blocking!")
}

比如我们利用 await 语法就可以直接使用任意的同步操作数据库 orm ,完全不用担心阻塞的问题(这里用的是 jooq):

@GET
suspend fun get() {
   await { promise ->
           val result = JooqManager.dsl?.selectFrom(Tables.TODO)?.fetch()?.into(Todo::class.java)
           renderJson(result )
           promise.complete()
       }
}

当然你把它封装好的话,看起来就是这样的:

@GET
suspend fun get() {
   renderJson(todoService.getTodoList())
}

当然还支持通过注解来设置验证器、Handler 等等,甚至还简化了 Vert.x 的 EventBus,你只需要在路由上面声明 @AfterEvent即可自动完成在 xxx 事件后执行 xxx 事件这种方式。

@GET("afterEvent")
@AfterEvent(["net.cloudopt.web.test"])
fun afterEvent() {
   this.context.data().put("key","value")
   renderText("AfterEvent is success!")
}

你只需要在其它类上声明 @AutoEvent 并继承 EventListener 即可自动订阅这个事件。

@AutoEvent("net.cloudopt.web.test")
class TestEventListener:EventListener {
   override fun listener(message: Message<Any>) {
       print(message.body())
   }
}

Cloudopt Next 在很大程度上让你保留了原先的编程习惯,同时获得了 Vert.x 的强大的性能。不仅如此,Cloudopt Next 提供了大量的插件,如分布式二级缓存、jooq、redis、日志、spring支持、quartz、国际化等等 Vert.x 没有提供的功能。还兼容 Vert.x 的模块体系。也就是说你不仅可以用 Next 官方出的插件,还可以用 Vert.x 的插件以及 Vert.x 社区贡献的一系列生态。

赶紧试试吧,使用 Koltin + Next 你将获得一个学习曲线平滑、使用简单、符合直觉且性能极高的异步服务。

“用Next来开发的作用有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI