文档章节

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

 小刀爱编程
发布于 2018/10/15 17:48
字数 1708
阅读 2.2K
收藏 9

精选30+云产品,助力企业轻松上云!>>>

近日,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规范。

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.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

提供了更详尽的安全示例。

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:是什么给了甲骨文开发这个新微服务框架的启发?

在此我向大家推荐一个架构学习交流君羊。交流学习君羊: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打包,没有你不需要的额外的东西。

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

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

粉丝 89
博文 109
码字总数 359473
作品 0
黄浦
私信 提问
加载中
此博客有 2 条评论,请先登录后再查看。
甲骨文最新推出的 Java 微服务框架 Helidon:轻量简单

据外媒报道,甲骨文在上周五宣布推出了 Helidon 的第一个版本,这是一个用于编写微服务的 Java 开源库,并且正式加入了 Eclipse MicroProfile。 Helidon 是一个开源的 Java 微服务框架,旨在...

局长
2018/09/12
1W
34
Oracle 微服务框架 Helidon 1.0 发布,API 开始稳定

Oracle 微服务框架 Helidon 1.0 发布了。 Helidon 是 Oracle 开源的一个用于编写微服务的 Java 框架,这些微服务运行在由 Netty 提供支持的快速 Web 内核上。该项目的特性包括轻量、快速、支...

h4cd
2019/03/12
6.2K
16
专为 Python 初学者准备的 IDE 你用过吗?

目前关于 Java 微服务框架的选择十分多,老牌的诸如 Spring Cloud, Thrift, ZeroC, Dubbo 等,新生的也有 Micronaut。本文推荐的 Helidon 是甲骨文打造的一个微服务框架,这是一个用于编写微...

Mr_zebra
2018/11/16
23
0
Oracle 微服务框架 Helidon 2.0.0-M1 发布:Helidon MP 中支持 GraalVM、新的 Helidon DB Client

Helidon 是 Oracle 开源的一个用于编写微服务的 Java 框架,这些微服务运行在由 Netty 提供支持的快速 Web 内核上。该项目的特性包括轻量、快速、支持 Microprofile、函数式编程模型与可观察...

oschina
02/17
4.8K
8
十月开源项目推荐:专为 Python 初学者准备的 IDE 你用过吗?

每月新增开源项目。顾名思义,每月更新一期。我们会从社区上个月新收录的开源项目中,挑选出有价值的、有用的、优秀的、或者好玩的开源项目来和大家分享。数量不多,但我们力求推荐的都是精品...

编辑部的故事
2018/11/14
5.2K
3

没有更多内容

加载失败,请刷新页面

加载更多

Mysql数据库之基础命令行概述篇

一、连接MYSQL   格式: mysql -h主机地址 -u用户名 -p用户密码   1、例1:连接到本机上的MYSQL。   首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提...

osc_dh3qbz0a
2分钟前
0
0
python的django项目制作思路(详细)个人总结

总结: 1.回顾django建站的思路: 一、Django简介 1.web框架介绍 别人已经设定好的一个web网站模版,你学习它的规则,然后”填空“或”修改“成自己需要的样子。一般web框架的架构是这样的:...

osc_qmxpov5s
2分钟前
0
0
时钟分频与时钟切换

时钟分频与时钟切换 1、时钟分频 1.1 偶数分频 1.2 奇数分频 1.2.1 占空比不要求50%的分频器 1.2.2 占空比50%的奇数分频器 2、时钟切换 2.1 有毛刺(glitch)的时钟切换 2.2、无毛刺时钟切换...

osc_80egdgxz
4分钟前
0
0
缓存面试题

项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 如何使用 如何使用是回答用缓存来干嘛了。 回答点:缓存能用来干嘛,项目中的缓冲用来干嘛了。 缓存当然是用来缓冲存...

osc_y7d83ufc
6分钟前
0
0
如何忽略Git中的某些文件 - How to ignore certain files in Git

问题: I have a repository with a file, Hello.java . 我有一个带有文件Hello.java的存储库。 When I compile it, an additional Hello.class file is generated. 当我编译它时,会生成一个......

javail
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部