咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

Quarkus微服务框架

QuarkusRedHat 的一款轻量级的 Java 微服务框架 ( MicroProfile 规范 )。

Quarkus 可以借助 GraalVM 编译成二进制文件,提供了优秀的容器化(Kubernetes)整合能力,相较于传统开发框架(Spring Boot)有着更快的启动速度、更小的内存消耗、更短的服务响应。

Quarkus的标签:RedHat / JVM / GraalVM / Vert.x (Netty) / MicroProfile / No Servlet /启动快 /占用内存小 / 容器 / Kubernetes

本文是阅读总结关键信息的笔记,更详细请阅读原文。
【如何借助 Quarkus 和 MicroProfile 实现微服务】
【英文原文:Implementing Microservicilities with Quarkus and MicroProfile】

Quarkus 实现 MicroProfile 规范微服务特性

MicroProfile 规范有些 API 是基于Jakarta EE(也就是以前的 Java EE)规范,其他的则由Java社区开发。
Quarkus 集成了 MicroProfile 规范,将企业级 Java 生态系统转移到了微服务架构中。

  • API,Quarkus 使用大家熟知的 JAX-RS 规范来定义 RESTful web API。在底层,Quarkus 使用了 RESTEasy 实现,直接与 Vert.X 框架协作,而不是使用 Servlet 相关的技术
  • 调用,Quarkus 使用 MicroProfile Rest Client 规范来访问外部的(HTTP)服务。它提供了一种类型安全的方式借助 HTTP 协议访问 RESTful 服务,在这个过程中,它会使用 JAX-RS 2.0 的一些 API 以实现一致性和更简单的重用。
  • 认证,Quarkus 集成了 MicroProfile JWT RBAC Security 规范,以使用 JWT Bearer Token 来保护服务。
  • 容错性,Quarkus 将 MicroProfile Fault Tolerance 规范与如下的注解集成到了一起,以便于处理故障相关的问题
  • 日志,Quarkus 使用 Graylog 扩展日志格式(Graylog Extended Log Format,GELF)与 Fluentd 进行了集成。
  • 监控,Quarkus 集成了 Micrometer 实现应用监控。Micrometer 为几乎所有流行的监控系统提供了一个简单的入口,从而能够让我们在避免供应商锁定的前提下 instrument 基于 JVM 的应用。
  • 跟踪,Quarkus 应用使用 OpenTracing 规范来为互相交互的 Web 应用提供分布式跟踪能力。

示例代码1:

1
2
3
4
5
6
7
8
9
@Path("/hello")
public class GreetingsResource {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy";
}
}

示例代码2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;

@Path("/book")
public class BookResource {

@GET
@Path("/{bookId}")
@Produces(MediaType.APPLICATION_JSON)
public Book book(@PathParam("bookId") Long bookId) {
// logic
}

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response getBook(Book book) {
// logic

return Response.created(
UriBuilder.fromResource(BookResource.class)
.path(Long.toString(book.bookId))
.build())
.build();
}

@DELETE
@Path("/{bookId}")
public Response delete(@PathParam("bookId") Long bookId) {
// logic

return Response.noContent().build();
}

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("search")
public Response searchBook(@QueryParam("description") String description) {
// logic

return Response.ok(books).build();
}
}

入门可以参考此文:【Quarkus云原生应用初体验】

如下图,类似 Quarkus 实现MicroProfile规范的框架有这么多: