内容简介:Firefly 4.5.0增加了Kotlin DSL风格的API和Spring Reactor适配器来帮助我们更方便的构建异步应用程序。 Kotlin DSL风格的API允许我们以半声明的方式来构造应用,例如: private val log = Log.getLogger { ...
Firefly 4.5.0增加了Kotlin DSL风格的API和Spring Reactor适配器来帮助我们更方便的构建异步应用程序。
Kotlin DSL风格的API允许我们以半声明的方式来构造应用,例如:
private val log = Log.getLogger { }
fun main(args: Array<String>) {
val server = HttpServer(requestLocal) {
router {
httpMethod = HttpMethod.GET
path = "/"
asyncHandler {
end("hello world!")
}
}
router {
httpMethods = listOf(GET, POST)
path = "/product/:type/:id"
asyncHandler {
statusLine {
status = OK.code
reason = OK.message
}
header {
"My-Header" to "Ohh nice"
SERVER to "Firefly kotlin DSL server"
+HttpField("Add-My-Header", "test add")
}
trailer {
"You-are-trailer" to "Crane ....."
}
val type = getRouterParameter("type")
val id = getRouterParameter("id")
log.info { "req type: $type, id: $id" }
writeJson(Response("ok", 200, Product(id, type))).end()
}
}
}
server.listen("localhost", 8080)
}在这个例子中,我们使用Kotlin DSL风格的API来设置HTTP method, path, header等,它能更清晰的表达HTTP协议的结构。
Firefly HTTP Server/Client (Kotlin版本)在协程(Coroutine)中执行业务逻辑,这意味着我们可以以同步风格的代码编写异步应用程序。编写协程同步风格的代码相比异步回调更简单,更易于阅读,并且不会影响程序的性能和伸缩性。
由于 Java 语言并没有原生协程(Coroutine),在未来的版本中我们考虑增加Quasar(一个JVM第三方协程库)适配器来使得Java版本的HTTP Server/Client运行在协程中。
为了让Java版本的框架更容易编写异步应用程序,增加了Spring Reactor适配器来帮助我们更流畅的构建异步应用。例如:
@Override
public Mono<Boolean> buy(ProductBuyRequest request) {
if (request == null) {
return Mono.error(new IllegalArgumentException("The product request is required"));
}
if (request.getUserId() == null || request.getUserId().equals(0L)) {
return Mono.error(new IllegalArgumentException("The user id is required"));
}
if (CollectionUtils.isEmpty(request.getProducts())) {
return Mono.error(new IllegalArgumentException("The products must bu not empty"));
}
return db.newTransaction(c -> buy(request, c));
}
private Mono<Boolean> buy(ProductBuyRequest request, ReactiveSQLConnection c) {
return inventoryDAO.updateBatch(request.getProducts(), InventoryOperator.SUB, c)
.doOnSuccess(this::verifyInventory)
.flatMap(arr -> productDAO.list(toProductIdList(request), c))
.map(products -> toOrders(request, products))
.flatMap(orders -> orderDAO.insertBatch(orders, c))
.map(orderIdList -> true);
}更多的例子请参考:
更新日志:
增加Kotlin DSL风格的API
增加异步 SQL 客户端
增加Reactive stream适配器
增加Coroutine dispatcher
HTTP客户端增自动识别gzip编码
增加slf4j MDC实现
增加日志formatter
增加AffinityThreadPool
【声明】文章转载自:开源中国社区 [http://www.oschina.net]
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- React 17 正式版发布
- Eclipse 4.9 正式版发布!
- PyCharm 2018.3 正式版发布!
- GoLand 2018.3 正式版发布!
- PhpStorm 2018.3 正式版发布!
- Gradle 5.0 正式版发布
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Django企业开发实战
胡阳 / 人民邮电出版社 / 2019-2 / 99.00元
本书以博客系统贯穿始末,介绍了Django的方方面面。书中共分四部分,第一部分介绍了正式进入编码之前的准备工作,内容包括需求分析、基础知识和Demo系统的开发;第二部分开始实现需求,内容涉及环境配置、编码规范以及项目结构规划,编写了Model层、admin页面、Form代码和View逻辑,引入了Bootstrap框架;第三部分重点介绍xadmin、django-autocomple-light和d......一起来看看 《Django企业开发实战》 这本书的介绍吧!