Oracle推出轻量级Java微服务框架Helidon
近日,Oracle 推出了一个新的开源框架 Helidon,该项目是一个用于创建基于微服务的应用程序的 Java 库集合。和 Payara Micro、Thorntail(之前的 WildFly Swarm)、OpenLiberty、TomEE 等项目一样,该项目也加入了 MicroProfile 家族。
Helidon 最初被命名为 J4C(Java for Cloud),其设计以简单、快速为目标,它包括两个版本:Helidon SE 和 Helidon MP。Helidon SE 提供了创建微服务的三个核心 API:Web 服务器、配置和安全,用于构建基于微服务的应用程序,不需要应用服务器。Helidon MP 支持用于构建基于微服务的应用程序的 MicroProfile 1.1 规范。
受 NodeJS 和其他 Java 框架的启发,Helidon 的 Web 服务器是一个异步、反应性 API,运行在 Netty 之上。WebServer 接口包括对配置、路由、错误处理以及构建度量和健康端点的支持。
下面的示例代码演示了如何启动一个简单的 Helidon Web 服务器,在一个随机可用的端口上显示“It works!”:
// 在一个随机可用的端口上启动服务器
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 目录下。
下面的示例代码基于前面的例子构建,它演示了如何使用 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 提供了更详尽的安全示例:
https://github.com/oracle/helidon/tree/master/security/examples
下面的架构图显示了 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 项目:
https://github.com/oracle/helidon
https://www.infoq.com/news/2018/10/oracle-introduces-helidon

来自硅谷的新兴概念,为何顶尖公司格外重视打造“增长黑客”能力?如何利用 Serverless 解决微服务挑战?微服务实践 2.0 时代到来,顶级构架师如何结合开源系统实战演练,快速实现微服务?
10 月 21 日 -22 日 QCon 大会特设深度培训 2 天,Serverless 、微服务及来自硅谷的增长黑客主题,冲破次元壁,与大咖面对面!创新者进阶不停,一批落地实践总结的“干货”,深度研讨踩坑填坑经验。
添加微信或人工咨询,8 折订购可再添优惠!报名从速,联系电话:15327409641 微信:chenxi988625 推荐给老板,企业团购优惠更多哦!

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 习近平听取李家超述职报告 7904645
- 2 收入分配制度或迎重大改革 7809618
- 3 福建舰入列后首次通过台湾海峡 7713824
- 4 回顾山东舰硬核名场面 7617769
- 5 健美冠军王昆去世 曾获职业赛8连冠 7523269
- 6 女教师新婚坠亡一楼业主要求赔偿 7425117
- 7 日本遗孤:从小恨自己为何是日本人 7328354
- 8 亚运冠军称举报领导后不敢再呆在家 7236188
- 9 4400万粉丝网红直播泳池派对被处理 7142368
- 10 感染甲流后该如何科学调养 7043379



![玥儿玥er0120的微博[悲伤][悲伤]最近很e'mo ](https://imgs.knowsafe.com:8087/img/aideep/2023/8/30/c106120ad707d769036df354819e44c6.jpg?w=250)



InfoQ
