近日,Oracle 推出 了一个新的开源框架 Helidon ,该项目是一个用于建立基于微服务的应用程序的Java库集合。和 Payara Micro 、 Thorntail (以前的 WildFly Swarm )、 OpenLiberty 、TomEE 等项目同样,该项目也加入了MicroProfile家族。java
Helidon最初被命名为J4C(Java for Cloud),其设计以简单、快速为目标,它包括两个版本:Helidon SE 和 Helidon MP 。Helidon SE提供了建立微服务的三个核心API:Web服务器、配置和安全,用于构建基于微服务的应用程序,不须要应用服务器。Helidon MP支持用于构建基于微服务的应用程序的MicroProfile 1.1规范。git
受NodeJS和其余Java框架的启发,Helidon的Web服务器是一个异步、反应性API,运行在 Netty 之上。 WebServer 接口包括对配置、路由、错误处理以及构建 度量和健康 端点的支持。github
下面的示例代码演示了如何启动一个简单的Helidon Web服务器,在一个随机可用的端口上显示“ It works! ”: web
// 在一个随机可用的端口上启动服务器 public void startWebServerUsingRandomPort() throws Exception { WebServer webServer = WebServer .create(Routing.builder() .any((req,res) -> res.send("It works!" + "\n")) .build()) .start() .toCompletableFuture() .get(10,TimeUnit.SECONDS); System.out.println("Server started at: http://localhost:" + webServer.port() + "\n"); webServer.shutdown().toCompletableFuture(); }
配置组件 Config 加载和处理键/值格式的配置属性。在默认状况下,配置属性将从定义好的 application.properties 或 application.yaml 文件中读取,它们位于 /src/main/resources 目录下。apache
下面的示例代码基于前面的例子构建,它演示了如何使用 Config ,经过读取 applications.yaml 文件得到指定的端口启动Web服务器。 安全
// application.yaml server: port: 8080 host: 0.0.0.0 // 在application.yaml预约义的端口上启动服务器 public void startWebServerUsingDefinedPort() throws Exception { Config config = Config.create(); ServerConfiguration serverConfig = ServerConfiguration.fromConfig(config.get("server")); WebServer webServer = WebServer .create(serverConfig,Routing.builder() .any((req,res) -> res.send("It works!" + "\n")) .build()) .start() .toCompletableFuture() .get(10,TimeUnit.SECONDS); System.out.println("Server started at: http://localhost:" + webServer.port() + "\n"); webServer.shutdown().toCompletableFuture(); }
类 Security 为身份验证、受权和审计提供支持。已经有许多用于Helidon应用程序的 安全提供程序 实现。有三种方法能够将安全性内置到Helidon应用程序中:从构建器、经过配置或者是前二者的结合。性能优化
下面的示例代码演示了如何构建 Security 实例、使用 Config 获取用户身份验证(使用加密密码)并显示服务器时间。服务器
// application.yaml http-basic-auth: users: login: "mpredli" password: "${CLEAR=somePassword}" roles: ["user","admin"] Config config = Config.create(); Security security = Security.builder() .config(config) .addProvider(...) .build(); String user = config.get("http-basic-auth.users.login").asString(); String password = config.get("http-basic-auth.users.password").asString(); System.out.println("\n"); System.out.println("INFO: user = " + user); System.out.println("INFO: password = " + password); SecurityTime time = SecurityTime.builder().build(); time = security.getServerTime(); System.out.println("INFO: server time = " + time.toString()); System.out.println("\n");
GitHub架构
提供了更详尽的安全示例。并发
下面的架构图显示了Helidon SE和Helidon MP的关系。
下图说明了Helidon SE和Helidon MP所属的微服务框架类别。
Helidon提供了 快速入门示例 来演示Helidon SE和Helidon MP之间的区别。
下面的Maven和Java命令将生成并打包Helidon SE示例,使用Helidon的Web服务器建立一个REST服务。
$ mvn archetype:generate -DinteractiveMode=false \ -DarchetypeGroupId=io.helidon.archetypes \ -DarchetypeArtifactId=helidon-quickstart-se \ -DarchetypeVersion=0.10.1 \ -DgroupId=io.helidon.examples \ -DartifactId=quickstart-se \ -Dpackage=io.helidon.examples.quickstart.se $ cd quickstart-se $ mvn package $ java -jar target/quickstart-se.jar
下面的Maven和Java命令将生成并打包Helidon MP示例,使用MicroProfile的JAX-RS API建立一个REST服务。
$ mvn archetype:generate -DinteractiveMode=false \ -DarchetypeGroupId=io.helidon.archetypes \ -DarchetypeArtifactId=helidon-quickstart-mp \ -DarchetypeVersion=0.10.1 \ -DgroupId=io.helidon.examples \ -DartifactId=quickstart-mp \ -Dpackage=io.helidon.examples.quickstart.mp $ cd quickstart-mp $ mvn package $ java -jar target/quickstart-mp.jar
一旦服务器开始运行,就能够执行下面的命令:
在 GitHub 上能够找到整个Helidon项目。
Oracle的高级软件开发经理 Dmitry Kornilov 向infoQ介绍了这个新项目。
在此我向你们推荐一个架构学习交流君羊。交流学习君羊:821169538 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多。
Dmitry Kornilov:有关Helidon的工做已经开始一段时间了。当建立云服务的微服务体系结构开始变得很是流行时,开发体验也须要改变。Java EE是一种稳定的技术,可是它有不少遗留代码。咱们没有在Java EE上构建微服务,咱们意识到,咱们须要一个从头开始设计的构建微服务的新框架。Helidon就是这样出现的。
InfoQ:与OpenLiberty、Thorntail、Payara Micro和TomEE等其余MicroProfile实现相比,Helidon有什么独特之处?
Kornilov:Helidon不单单是一个MicroProfile实现。它有两个版本:Helidon SE和Helidon MP。
Helidon SE构成了Helidon的核心。它是一组轻量级的库,其中的库能够单独使用,但若是一块儿使用,就能够知足开发人员建立微服务的基本需求:配置、安全和Web服务器。它带来了一种开发人员喜欢的更现代的反应性方法。咱们老是尽力明确:不使用注入“魔法”,使Helidon SE应用程序易于调试。没有特殊的jar格式,没有特殊的类加载器。你的应用程序只是一个普通的Java SE应用程序。这也意味着,它与全部IDE兼容,不须要特殊的插件。
Helidon MP是咱们的MicroProfile实现,它以Helidon SE为基础构建——它不是派生自某个应用服务器。所以,没有部署模型,没有Java EE打包,没有你不须要的额外的东西。
Kornilov:Helidon的开发在一段时间以前就开始了,咱们决定坚持使用当时最新的MicroProfile版本。咱们正在不断地改进Helidon,对新的MicroProfile版本的支持很快就会到来。
InfoQ:接下来,尤为是在Jakarta EE支持和MicroProfile规范较新版本的支持方面,Helidon将开展哪些工做?
Kornilov:我已经提到过,咱们正致力于对MicroProfile较新版本的支持。当新的Jakarta EE 规范出现时,咱们将参与它们的开发并在Helidon中支持它们。此外,咱们计划向Helidon添加Oracle Cloud集成特性、HTTP客户端支持、项目启动器Web应用,并不断改进咱们的示例和文档。
出处:https://mp.toutiao.com/profile_v3/graphic/articles