Java微框架的兴起,流行微服务框架点评

微服务框架

随着微服务和轻量级REST API的日益流行,我们目睹了Java的另一个趋势:Java微框架的崛起。Javalin, Micronaut, Spark 和其他很多东西让构建REST api变得轻而易举。在本文中,我将研究这个令人兴奋的领域,并分享我对它们使用的看法。

什么是微服务框架?

微框架是一种极简主义的web应用程序框架。与传统的大型应用程序框架不同的是:

关注开发的简单性和速度

通常小得多的代码库

缺乏一些高级特性,如模板引擎、高级安全特性等。

它不是一个科学的定义和一些框架。例如,在两者的边界上,它是轻量级的,比我们说的Spring要小得多,但是在另一方面,它是很好的特色和非平凡的。

值得补充的是,并不是Java发明的微框架。早期的例子之一是来自Ruby(2007)的Sinatra,它激发了相当多的Java微框架。我相信有些读者会熟悉甚至更早的例子-如果你是,请在评论区给我留言!

为什么微框架越来越流行?

首先,微框架还不是主流。这可能很快就会改变,特别是随着对服务器架构的兴趣的快速增长。Serverless真正受益于小型和轻量级部署—如果您希望在这种上下文中使用Java,那么微框架似乎是一个很好的选择。

另一个推动其流行的因素是容器(Docker)、容器管理系统(Kubernetes)以及API网关等模式的日益采用。突然间,服务不再需要像以前那样处理许多问题。

如果微框架本身不容易使用,那么这一切都无关紧要。新项目令人惊叹。我是企业Spring Boot的忠实拥护者,但我不能否认Javalin的优雅。难以置信的是,今天的微框架创建者仅用几千行代码就能完成的事情!

微框架之旅

说得够多了,让我们看看我最喜欢的项目,看看它们有多简单。

Javalin

一个用于Java和Kotlin的简单web框架。

一个用于Java和Kotlin的简单web框架。

这是我第一次接触“现代”Java微框架。Javalin是在Kotlin编写的,它支持Java和Kotlin。如果您想编写一个漂亮的REST API,那么Javalin是一种乐趣。

Javalin正在积极开发中,每隔几周就会发布新版本。

Javalin Hello World:

import io.javalin.Javalin;
public class HelloWorld {
public static void main(String[] args) {
Javalin app = Javalin.start(7000);
app.get("/", ctx -> ctx.result("Hello World"));
}
}

Javalin官网:https://javalin.io/

Spark Java

spark

Spark -在Kotlin和Java 8中创建web应用程序的微型框架,只需最少的努力。

早在2011年Java就采用了微框架。Spark非常小,重点突出,可能是这里提到的框架中最常用的。

Spark正在积极开发,每隔几个月就会发布bug修复和维护。新功能的添加频率较低。

Spark Hello World:

import static spark.Spark.*;
public class HelloWorld {
public static void main(String[] args) {
get("/hello", (req, res) -> "Hello World");
}
}

官网:http://sparkjava.com/

Micronaut

micronaut

Micronaut用于构建模块化、易于测试的微服务应用程序的现代、基于jvm的全栈框架。

有了Micronaut,我们就离屏障越来越近了被认为是微框架的东西和不被认为是微框架的东西。这个框架非常简单,但是它比大多数竞争对手都多。我认为它是一种非常精简版的Spring Boot。

Micronaut的伟大之处在于他们对云的关注。在AWS上工作并使编写serverless应用程序变得很容易,这是他们优先考虑的问题。

1.0.0版本的第一个里程碑版本是在2018年5月30日发布的,所以我们还处在早期阶段。我认为Micronaut很有可能成为下一个大事件,所以关注一下这个!

Micronaut Hello World:

import io.micronaut.runtime.Micronaut;
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/hello")
public class HelloController {
@Get("/")
public String index() {
return "Hello World";
}
}

官网地址:http://micronaut.io/

Ktor

ktor

易于使用,有趣和异步。

不是Java,而是Kotlin微框架。Ktor是由JetBrains公司赞助和开发的,JetBrains是Kotlin的创造者,它致力于使开发变得简单和有趣。我还没有机会测试它,但是基于Kotlin爱好者和JetBrains的支持,值得一提。

Ktor还没有发布1.0.0版本,但应该是在今年的某个时候。

Ktor Hello World:

import io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
fun main(args: Array<String>) {
val server = embeddedServer(Netty, port = 8080) {
routing {
get("/") {
call.respondText("Hello World!", ContentType.Text.Plain)
}
get("/demo") {
call.respondText("HELLO WORLD!")
}
}
}
server.start(wait = true)
}

官网:http://ktor.io/

其他值得注意的服务网框架

很难对所有Java微框架进行概述。以下是我没有进一步探究的一些问题,但仍然可以进行研究和考虑:

Ratpack—Ratpack是一组用于构建可伸缩HTTP应用程序的Java库。它是一个精干而强大的基础,而不是一个包罗万象的框架。

Jooby -可伸缩、快速、模块化的Java微web框架。

Akka HTTP——Akka HTTP模块在Akka -actor和Akka -stream之上实现完整的服务器和客户端HTTP栈。它不是web框架,而是提供和使用基于http的服务的更通用的工具包。

Dropwizard是一个用于开发操作系统友好、高性能、基于rest的web服务的Java框架。

Jodd - Jodd是一组微型框架和开发人员友好的工具和实用工具。简单的代码。小尺寸。良好的表现。无论什么。使用你喜欢什么。

Armeria -是一个开源的异步HTTP/2 RPC/REST客户端/服务器库,构建在Java 8、Netty、Thrift和gRPC之上。

Ninja - Ninja是一个完整的Java web框架。坚如磐石,速度快,效率高。

Pippo——它是一个开放源码(Apache License)的Java微型web框架,具有最小的依赖性和快速的学习曲线。

Rapidoid——Rapidoid是一个非常快速的HTTP服务器和现代Java web框架/应用程序容器,非常关注高生产率和高性能。

在这个列表之外,我建议您查看Ratpack、Jooby和Dropwizard。特别是前两个框架与微框架哲学非常紧密地联系在一起。

我需要的不仅仅是一个微框架

如果你需要一些轻量级,但功能齐全的东西,我可以推荐两个主要的选择:

Spring Boot - Spring Boot使创建基于生产级的独立的Spring应用程序变得容易,您可以“直接运行”这些应用程序。

Vert.x - Eclipse绿色。x是在JVM上构建反应性应用程序的工具包。

总结

使用微框架工作既有趣又富有成效。有时,我们很容易总是选择Spring Boot,却忘记了Java和Kotlin的创新正在发生。我对Micronaut和Javalin以及它们可能影响未来JVM开发的方式感到特别兴奋。

终极云支持和终极简单真的吸引我。

如果我错过了您最喜欢的框架(或者在我的评论中没有给出公正的评价),请在评论区给我留言。

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zhisheng

具有一到五年开发经验的程序员该如何提升自己?

敢不敢不给涨薪就“挥一挥衣袖,不带走一个bug”?是不是提出要求后你的主管、经理立刻

13520
来自专栏marsggbo

TPU使用说明

为了连接到 TPU,我们必须配置一台虚拟机(单独结算)。要注意的是虚拟机和TPU是分别计费的。

16620
来自专栏SAP最佳业务实践

想学FM系列(9)-SAP FM模块:主数据(7)-主数据权限、报表

3.1.6 账户分配要素主数据权限检查 在FM模块当中部份主数据的权限检查,SAP支持不是很好,比如对基金计划程序的权限支持不是很好。针对集团式管控的企业,对F...

46660
来自专栏Java架构师历程

7、重构单体为微服务

本书主要介绍如何使用微服务构建应用程序,这是本书的第七章,也是最后一章。第一章介绍了微服务架构模式,讨论了使用微服务的优点与缺点。随后的章节讨论了微服务架构的方...

16230
来自专栏斑斓

【系统架构】对CQRS的基础理解

CQRS由Greg Young提出,目前在DDD领域中被广泛使用。在我看来,它甚至可以被称为是一种架构风格,可以取得与MapReduce,REST同等的地位,对...

74350
来自专栏架构师小秘圈

有经验的程序员应该如何提升自己

工作1-5年,当我们向老板提出加薪的时候,或者跳槽去“捡”offer的时候,我们底气够吗? 敢不敢不给涨薪,就“挥一挥衣袖,不带走一个bug”?是不是提出要求后...

36950
来自专栏大魏分享(微信公众号:david-share)

一个高级应用设计概要:完整设计一个高级应用-第一篇

版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。

11520
来自专栏腾讯Bugly的专栏

【功能发布】Crash不好找?Bugly来支招!

自Bugly上线以来,通过各位开发者的试用和口口相传,目前Bugly已经迎来了大批量的用户,在业内的反响只能用下图来形容: ? 当然也有很多程序员哥哥在使用的过...

34650
来自专栏Java架构

从架构演进的角度聊聊Spring Cloud都做了些什么?传统架构发展史 SOA和微服务架构总结

单体架构在小微企业比较常见,典型代表就是一个应用、一个数据库、一个web容器就可以跑起来,比如我们开发的开源软件云收藏,就是标准的单体架构。

32120
来自专栏前端架构

透析SOA、RPC、SOAP、REST、ICE、ESB模型发展史

最初的程序全是单机程序,没有网络,没有RPC,更没有RESTful。程序猿写的东西孤独运行在单机上。

18930

扫码关注云+社区

领取腾讯云代金券