Quarkus
?Quarkus
是为GraalVM
和HotSpot
量身定制的Kubernetes Native Java
框架,由最佳的Java
库和标准精心打造而成。Quarkus
的目标是使Java
成为Kubernetes
和无服务器环境中的领先平台,同时为开发人员提供统一的反应式和命令式编程模型,以优化地满足更广泛的分布式应用程序架构。
官方地址:https://quarkus.io/
要完成本指南,您需要:
JAVA_HOME
正确配置JDK 8
或11+
Apache Maven 3.6.2
以上创建新的Quarkus
项目的最简单方法是打开一个终端并运行以下命令:
Linux
和MacOS
用户mvn io.quarkus:quarkus-maven-plugin:1.10.5.Final:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-DclassName="org.acme.getting.started.GreetingResource" \
-Dpath="/hello"
cd getting-started
cmd
,(请不要使用反斜杠\
)mvn io.quarkus:quarkus-maven-plugin:1.10.5.Final:create -DprojectGroupId=org.acme -DprojectArtifactId=getting-started -DclassName="org.acme.getting.started.GreetingResource" -Dpath="/hello"
Powershell
,则将-D
参数用双引号引起来mvn io.quarkus:quarkus-maven-plugin:1.10.5.Final:create "-DprojectGroupId=org.acme" "-DprojectArtifactId=getting-started" "-DclassName=org.acme.getting.started.GreetingResource" "-Dpath=/hello"
它在中生成以下内容 ./getting-started
:
org.acme.getting.started.GreetingResource
公开的资源/hello
http://localhost:8080
启动应用程序后可访问的登录页面Dockerfile
文件native、jvm、src/main/docker
生成后,查看pom.xml
。您将找到Quarkus BOM
的导入,从而可以忽略不同Quarkus
依赖项上的版本。此外,您可以看到quarkus-maven-plugin
负责应用程序打包的人员,还提供了开发模式。
hello world
package org.acme.getting.started;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello world";
}
}
$ mvn compile quarkus:dev
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< org.acme:getting-started >----------------------
[INFO] Building getting-started 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.10.5.Final:dev (default-cli) @ getting-started ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\work\getting-started\target\classes
Listening for transport dt_socket at address: 5005
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2021-01-15 23:00:30,380 WARN [io.qua.dep.QuarkusAugmentor] (main) Using Java versions older than 11 to build Quarkus applications is deprecated and will be disallowed in a future release!
2021-01-15 23:00:31,342 INFO [io.quarkus] (Quarkus Main Thread) getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.10.5.Final) started in 1.017s. Listening on: http://localhost:8080
2021-01-15 23:00:31,343 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2021-01-15 23:00:31,343 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy]
$ curl -w "\n" http://localhost:8080/hello
hello
Quarkus
中的依赖注入基于ArC
,它是为Quarkus
架构量身定制的基于CDI的依赖注入解决方案。如果您不熟悉CDI,建议您阅读CDI简介指南。
Quarkus
仅实现CDI
功能的一个子集,并具有非标准功能和特定的APIS
,您可以在Contexts and Dependency Injection指南中了解有关它的更多信息。
ArC
作为的依赖项,quarkus-resteasy
因此您已经很方便了。
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "hello " + name;
}
}
@Inject
GreetingService service;
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/greeting/{name}")
public String greeting(@PathParam String name) {
return service.greeting(name);
}
curl -w "\n" http://localhost:8080/hello/greeting/shaojie
hello shaojie
确保io.quarkus:quarkus-resteasy-mutiny
存在对RESTEasy
扩展名()的Mutiny
支持,需要添加io.quarkus:quarkus-resteasy-mutiny
依赖,官方提供了两种添加依赖的方式
mvn io.quarkus:quarkus-maven-plugin:1.10.5.Final:add-extensions \
-Dextensions="io.quarkus:quarkus-resteasy-mutiny"
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-mutiny</artifactId>
</dependency>
最简单的生成定期的问候消息
public Multi<String> greetings(int count, String name) {
return Multi.createFrom().ticks().every(Duration.ofSeconds(1))
.onItem().transform(n -> String.format("hello %s - %d", name, n))
.transform().byTakingFirstItems(count);
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/greeting/{count}/{name}")
public Multi<String> greetings(@PathParam int count, @PathParam String name) {
return service.greetings(count, name);
}
该端点将项目作为JSON
数组流式传输到客户端。消息的名称和数量使用路径参数进行参数化。
$ curl http://localhost:8080/hello/greeting/3/neo
[
"hello shaojie - 0",
"hello shaojie - 1",
"hello shaojie - 2"
]
这里有一个小坑,官方没有提供完整的依赖,因为缺少依赖,所以这个请求并不能拿到当前的json
返回值,需要添加一个依赖
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
还可以通过返回来生成服务器发送的事件响应Multi
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
@SseElementType(MediaType.TEXT_PLAIN)
@Path("/stream/{count}/{name}")
public Multi<String> greetingsAsStream(@PathParam int count, @PathParam String name) {
return service.greetings(count, name);
}
@SseElementType
指示每个事件类型的注释。正如@Produces
注释所定义的那样SERVER_SENT_EVENTS
,JAX-RS
需要它知道每个(嵌套的)事件的内容类型。
$ curl -N http://localhost:8080/hello/stream/3/shaojie
data: hello shaojie - 0
data: hello shaojie - 1
data: hello shaojie - 2
只是简单的了解一下,感觉还可以,后面深入去了解一下Quarkus
第一眼看上去竟然不知道怎么读的,翻译也翻译不出来,然后网上有一段介绍是:
红帽公司中间件团队在3月7日正式发布了Quarkus项目。 Quark(夸克)是物理学名词,可以看成是最小粒子,如元素周期表序数为1的氢原子,含有一个质子,也是由3个上下夸克组成的。 所以Quarkus这个名称,应该有微小服务的含义。
说不出来的奇怪,不深究这个,反正英文水平一般,就上面的例子而言,有些地方的语法有点蹩脚,但是不知道是不是因为还不了解的原因,线了解一下,防止后面看不懂。
简单了解,有错误或者不对的地方请指正,谢谢!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有