helidonV4

基于21版本的JDK,全新微服务虚拟线程框架helidon

什么是helidon

用java编写的全新微服务框架,

  • 两种helidon
helidon SEhelidon MP
完全开源透明基于helidon SE库构建
占用内存极小 7MBMicroProfile 实现;占用空间略大于 SE(约 13MB)
helidon的基础API合集,helidon4开始,虚拟线程使这些API从异步变为阻塞模式,使得代码变得简单声明式风格、依赖注入
纯java开发,无需注解,也无需依赖注入类似于springboot基于javaEE构建
  • helidon SE示例
1
2
3
4
5
6
WebServer.builder()
        .addRouting(HttpRouting.builder()
                            .get("/greet", (req, res)
                                    -> res.send("Hello World!")))
        .build()
        .start();
  • helidon MP示例
1
2
3
4
5
6
7
@Path("hello")
public class HelloWorld {
    @GET
    public String hello() {
        return "Hello World";
    }
}

helidon SE组件介绍

config配置

1741919952708.png

  • config系统:允许用户从应用程序中读取配置数据

  • config Source配置源:包含配置数据的位置(文件、映射、属性等)

  • config parser配置解析器:一种可以将字节转换为配置数据(例如JOSN、YAML等)的组件

config Source 配置源

可以从不同类型的来源加载配置,并以不同的格式表示。

  • 配置系统支持的配置源
  1. 环境变量:一个名称/值对
  2. java系统属性:一个名称/值对
  3. 类路径中的资源:根据推断出的格式对资源的内容进行解析
  4. 文件:对文件内容进行解析
  5. 目录:目录中的每个非目录文件都会成为一个配置项(文件名为key,该文件的内容为value)
  6. URL:对URL资源的内容进行解析。
  7. 内存:内存中的数据结构(String、Map、Properties)

Config parsers配置解析器

从配置源读取配置文件时,config系统会使用配置解析器将该文件转换为表示该配置的内存中的数据结构。

可以实现 ConfigParser 接口,然后使用addParser方法构建一个自定义的配置解析器。

总结

config系统将配置源视为一个层次结构,其中具有特定配置键的第一个源“胜出”,其值将会被使用。其他源甚至不会被查询该键。

CORS跨源资源共享

协助开发人员控制应用程序提供的REST资源如何在不同源之间共享。Helidon SE API可以以编程的方式定义应用程序的CORS行为。

两种资源共享方式

  • 使用配置和自动功能检查(官方推荐)

如果将Helidon CORS Maven依赖添加到项目中,Helidon会在运行时自动发现并根据配置激活它。(无需修改java代码)完全通过程序公开的资源路径相关联的配置来控制程序的CORS行为。

1
2
3
4
<dependency>
    <groupId>io.helidon.webserver</groupId>
    <artifactId>helidon-webserver-cors</artifactId>
</dependency>
  • 使用CORS API 为程序中的特定服务或端点路由添加CORS处理
  1. 创建一个与资源相对应的 CorsSupport 实例。
  2. 创建一个 CrossOriginConfig 实例。 CrossOriginConfig Java 类表示特定类型共享的详细信息,例如哪些源允许通过哪些 HTTP 方法进行共享等等。
  3. 在为该资源设置路由规则时,请使用该资源的 CorsSupport 对象。

Helidon数据库客户端

1
2
3
4
<dependency>
    <groupId>io.helidon.dbclient</groupId>
    <artifactId>helidon-dbclient</artifactId>
</dependency>

依赖注入

能够在程序运行时从注册表获取服务实例,而不是通过构造函数或工厂方法来构建服务实例。

1
2
3
4
<dependency>
    <groupId>io.helidon.service</groupId>
    <artifactId>helidon-service-registry</artifactId>
</dependency>
1
2
3
4
5
6
7
8
@Service.Singleton
class Greeter {

    String greet(String name) {
        return "Hello %s!".formatted(name);
    }

}
  • 使用上面的依赖注入
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@Service.Singleton
class GreetingInjectionService {

    private final Greeter greeter;

    @Service.Inject
    GreetingInjectionService(Greeter greeter) {
        this.greeter = greeter;
    }

    void printGreeting(String name) {
        System.out.println(greeter.greet(name));
    }
}
  • 手动获取并执行
1
2
3
4
public static void main(String[] args) {
    var greetings = Services.get(GreetingInjectionService.class);
    greetings.printGreeting("David");
}

反应式消息

一个由连接器、发射器以及用于编排这些任务的机制组成的系统,称为响应式消息传递。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计