GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

Oracle 推出轻量级 Java 微服务框架 Helidon

2018 年 10 月 14 日

近日,Oracle推出了一个新的开源框架 Helidon ,该项目是一个用于创建基于微服务的应用程序的 Java 库集合。和 Payara Micro Thorntail (之前的 WildFly Swarm )、 OpenLiberty TomEE 等项目一样,该项目也加入了 MicroProfile 家族。

Helidon 最初被命名为 J4C(Java for Cloud),其设计以简单、快速为目标,它包括两个版本:Helidon SEHelidon MP。Helidon SE 提供了创建微服务的三个核心 API:Web 服务器、配置和安全,用于构建基于微服务的应用程序,不需要应用服务器。Helidon MP 支持用于构建基于微服务的应用程序的 MicroProfile 1.1 规范。

Web 服务器

受 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.propertiesapplication.yaml文件中读取,它们位于/src/main/resources目录下。

下面的示例代码基于前面的例子构建,它演示了如何使用Config,通过读取applications.yaml文件获得指定的端口启动 Web 服务器。  

复制代码
// application.yaml
server:
port: 8080
host: 0.0.0.0
{1}
 
// 在 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();
}
{1}

安全

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 的架构

下面的架构图显示了 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 介绍了这个新项目。

InfoQ:是什么给了甲骨文开发这个新微服务框架的启发?

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 打包,没有你不需要的额外的东西。

InfoQ:为什么实现的是 MicroProfile 1.1 规范,而不是一个更新的版本?

Kornilov:Helidon 的开发在一段时间之前就开始了,我们决定坚持使用当时最新的 MicroProfile 版本。我们正在不断地改进 Helidon,对新的 MicroProfile 版本的支持很快就会到来。

InfoQ:接下来,尤其是在 Jakarta EE 支持和 MicroProfile 规范较新版本的支持方面,Helidon 将开展哪些工作?

Kornilov:我已经提到过,我们正致力于对 MicroProfile 较新版本的支持。当新的 Jakarta EE 规范出现时,我们将参与它们的开发并在 Helidon 中支持它们。此外,我们计划向 Helidon 添加 Oracle Cloud 集成特性、HTTP 客户端支持、项目启动器 Web 应用,并不断改进我们的示例和文档。

相关资源

查看英文原文: Oracle Introduces Helidon - A Lightweight Java Microservices Framework

2018 年 10 月 14 日 19:003708
用户头像

发布了 1008 篇内容, 共 313.8 次阅读, 收获喜欢 282 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

霸榜Git!2021年阿里巴巴Java面试权威指南(全彩版)

云流

Java 程序员 面试 架构师

打卡学习VBA和PYTHON week01

小怪兽

IT蜗壳教学

DCache 分布式存储系统|Set, ZSet 缓存模块的创建与使用

TARS基金会

nosql 缓存 分布式 MySQL 高可用 TARS

filecoin云算力软件开发|filecoin云算力APP系统开发

开發I852946OIIO

系统开发

如何评估需求优先级?

石云升

项目管理 28天写作 职场经验 管理经验 3月日更

霸榜Git!2021年阿里巴巴Java面试权威指南(泰山版)

Java架构之路

Java 程序员 架构 面试 编程语言

一周信创舆情观察(3.8~3.14)

统小信uos

发布两小时,霸榜GitHub!Spring Boot实战文档

云流

Java 编程 程序员 架构师

炸裂,IBM系统架构师居然把自己15年Java经验整合成一本小说?

Java架构师迁哥

epoll源码分析以及在Redis中的实现

Linux服务器开发

redis 后端开发 epoll web服务器 Linux服务器开发

全球案例 | Infobip :这家估值十亿美元的公司像初创企业一样规模化发展,像大型企业一样标准化

Atlassian

DevOps Agile Atlassian Jira ITSM

2021金三银四全新版Java面试突击手册,共计1000多道面试题(附答案)

神奇小汤圆

Java 程序员 面试

图解垃圾算法,No,捡垃圾算法

叫练

GC算法 引用计数法 标记清除法

朱嘉明:比特币开创人类新型财富实验

CECBC区块链专委会

数字货币

DorisDB在中移物联网PGW实时会话业务领域的应用

DorisDB

大数据 数据分析 物联网 IoT OLAP

2021年新兴的十大区块链技术趋势

CECBC区块链专委会

数字技术

uni-app跨端开发H5、小程序、IOS、Android(二):开发工具HBuilderX使用技巧

黑马腾云

微信小程序 uni-app App 3月日更 Hbuilderx

filecoin挖矿软件开发|filecoin挖矿APP系统开发

开發I852946OIIO

系统开发

为什么 Java 坚持多线程不选择协程?

神奇小汤圆

Java 编程 面试

寻找被遗忘的勇气(十八)

Changing Lin

3月日更

php 再上热搜!swoole 创始人投出反对票,质疑 php 协程最新提案

薇薇

php 编程 新特性 php扩展

科技进化的终点,与荣耀全场景的起点

脑极体

filecoin矿机系统开发|filecoin矿机软件APP开发

开發I852946OIIO

系统开发

收藏!这些IDE使用技巧,你都知道吗

xcbeyond

IDEA 技巧 3月日更

声网Agora发布创业支持计划:聚合50+合作伙伴、11项资源扶持创业者

ToB行业头条

声网 Agora

以数字人民币为契机 推动人民币国际化进程

CECBC区块链专委会

金融

趋势预测:2021年五大流行的编程语言

薇薇

Java c php JavaScript Python PEP

低代码/无代码,作为IT开发界的“新英雄”它究竟有何神技?

优秀

低代码 无代码开发

全凭阿里大牛总结的Java面试笔记,首战成功拿蚂蚁offer

Java架构之路

Java 程序员 架构 面试 编程语言

直击面试!阿里技术官手码12W字面试小册在Github上爆火

Java架构之路

Java 程序员 架构 面试 编程语言

让GitHub低头的10W字阿里内部Java面试手册有多强?

Crud的程序员

Java 编程 程序员 架构

DNSPod与开源应用专场

DNSPod与开源应用专场

Oracle推出轻量级Java微服务框架Helidon-InfoQ