gRPC是Google基于HTTP/2和Protocol Buffers构建的高性能RPC框架,支持多语言,适用于微服务。通过定义.proto文件描述服务接口和消息结构,如UserService包含GetUser方法;使用protoc编译器配合gRPC插件生成Java代码,包括UserServiceGrpc(含客户端存根和服务端基类)和UserProto(消息类);服务端继承UserServiceImplBase实现getUser方法,返回构造的UserResponse并通过StreamObserver发送;客户端通过ManagedChannel连接服务端,使用阻塞存根同步调用getUser并输出用户姓名与邮箱;需在pom.xml引入grpc-netty-shaded、grpc-protobuf和grpc-stub依赖。gRPC利用HTTP/2多路复用和二进制序列化提升通信效率,较传统REST更具性能优势。

gRPC 是 Google 基于 HTTP/2 和 Protocol Buffers 开发的高性能远程过程调用(RPC)框架,支持多语言,Java 是其中重要的一环。使用 gRPC 能实现低延迟、高吞吐量的服务间通信,特别适合微服务架构。
定义服务接口(.proto 文件)
在 Java 中使用 gRPC,首先要定义服务接口和消息结构,通过 Protocol Buffers(protobuf)来描述。
创建一个 service.proto 文件:
syntax = “proto3”;package example;service UserService { rpc GetUser (UserRequest) returns (UserResponse);}message UserRequest { int32 id = 1;}message UserResponse { string name = 1; string email = 2;}
这个文件定义了一个 UserService 服务,提供一个根据 ID 获取用户信息的方法。
立即学习“Java免费学习笔记(深入)”;
生成 Java 代码
使用 protobuf 编译器(protoc)配合 gRPC 插件生成 Java 代码。
确保安装了:
protoc 编译器 gRPC Java 插件(protoc-gen-grpc-java)
执行命令生成代码:
protoc –plugin=protoc-gen-grpc-java=xxx/bin/protoc-gen-grpc-java –grpc-java_out=. –java_out=. service.proto
会生成两个类:
AppMall应用商店
AI应用商店,提供即时交付、按需付费的人工智能应用服务
56 查看详情
UserServiceGrpc:包含客户端存根(Stub)和服务端基类 UserProto:包含请求和响应的消息类
实现服务端
继承生成的 UserServiceGrpc.UserServiceImplBase,重写业务逻辑方法。
示例:
public class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase { @Override public void getUser(UserRequest request, StreamObserver responseObserver) { // 模拟查询用户 UserResponse response = UserResponse.newBuilder() .setName(“Alice”) .setEmail(“alice@example.com”) .build(); // 发送响应 responseObserver.onNext(response); // 完成调用 responseObserver.onCompleted(); }}
启动 gRPC 服务端:
public class GrpcServer { public static void main(String[] args) throws IOException, InterruptedException { Server server = ServerBuilder.forPort(8080) .addService(new UserServiceImpl()) .build(); server.start(); System.out.println(“gRPC 服务已启动,监听 8080 端口”); server.awaitTermination(); }}
编写客户端调用
使用生成的客户端存根发起远程调用。
public class GrpcClient { public static void main(String[] args) throws InterruptedException { ManagedChannel channel = ManagedChannelBuilder .forAddress(“localhost”, 8080) .usePlaintext() // 不启用 TLS .build(); UserServiceGrpc.UserServiceBlockingStub stub = UserServiceGrpc.newBlockingStub(channel); UserRequest request = UserRequest.newBuilder().setId(1).build(); UserResponse response = stub.getUser(request); System.out.println(“姓名: ” + response.getName()); System.out.println(“邮箱: ” + response.getEmail()); channel.shutdown(); }}
上面是同步调用方式,gRPC 也支持异步流式调用,只需使用非阻塞 Stub 并传入 StreamObserver。
添加 Maven 依赖
在 pom.xml 中引入必要依赖:
io.grpc grpc-netty-shaded 1.58.0 io.grpc grpc-protobuf 1.58.0 io.grpc grpc-stub 1.58.0
gRPC 使用 HTTP/2 多路复用、二进制序列化(protobuf),相比传统 REST 更高效。只要定义好 proto 接口,Java 端就能快速实现高性能远程调用。基本上就这些。
以上就是java怎么使用gRPC进行通信 使用gRPC实现高性能远程调用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/295338.html
微信扫一扫
支付宝扫一扫