gRPC with Quarkus!

在 Quarkus 1.5 中,我们发布了 gRPC Quarkus 扩展 的第一个版本。

如果您不熟悉 gRPC,它是一种高度高效的远程过程调用机制,依赖于 HTTP/2 和 Protobuf。您可以从任何语言(如 Go、JavaScript、Python 和 Java)实现和使用 gRPC 服务。gRPC 支持双向数据流以及更经典的请求-响应交互模式。gRPC 特别适合微服务。它提供了对身份验证、跟踪和运行状况的支持,这三个是构建微服务系统时的主要关注点。

gRPC 服务在 proto 文件中描述,这些文件列出了不同的方法(下例中的 Hello)并定义了交换的消息(HelloRequestHelloReply)。

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.quarkus.grpc.examples.helloworld";
option java_outer_classname = "HelloWorld";

package io.quarkus.grpc.example;

service Greeter {
    rpc Hello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
    string name = 1;
}

message HelloReply {
    string message = 1;
}

protoc,即 Proto Compiler,会从这些 proto 文件为不同的目标语言生成存根(客户端)和基本实现(服务)。

Protoc generation

要启用 Quarkus 中的 gRPC 支持,请添加 quarkus-grpc 扩展。您可以通过将以下依赖项添加到您的项目中或运行以下命令来完成此操作。

quarkus-grpc 依赖
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-grpc</artifactId>
</dependency>
将 quarkus-grpc 扩展添加到现有项目
mvn quarkus:add-extension -Dextension=quarkus-grpc

当然,您也可以从 项目生成器 中选择 gRPC

目前,该扩展不包括 protoc 生成,您需要为此配置您的项目。您可以在 此处 找到一个示例。

gRPC 扩展支持

  • 实现 gRPC 服务

  • 消费 gRPC 服务

  • 明文和 TLS

  • 相互身份验证

  • gRPC 健康和反射服务

  • gRPC "原生" Java API 和与 Quarkus 的响应式 API 集成的 Mutiny API。

够了废话,该看看实际效果了!

此视频中展示的代码可在 GitHub 项目 中找到。

更多内容即将推出!

这只是第一步。我们有很多想法可以做得更好。首先,我们希望涵盖 protoc 生成,并通过允许在开发时修改这些 proto 文件来改进热重载体验。对自定义压缩器、负载均衡器和名称解析器的支持也在路线图上。

我们非常重视您的反馈,请报告错误、提出改进意见……

如果您是 Quarkus 用户或只是好奇,请不要害羞,加入我们的社区!