grpc demo

该文指导如何初始化一个Go模块,创建一个名为helloworld.proto的protobuf文件,定义一个名为Greeter的服务及SayHello方法。接着,使用protoc编译器生成Go代码,实现gRPC接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、项目根目录命令行执行

go mod init gorpcdemo

2、创建文件

helloworld.proto

syntax = "proto3"; // 版本声明,使用Protocol Buffers v3版本

package pb; // 包名


// 定义一个打招呼服务
service Greeter {
    // SayHello 方法
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// 包含人名的一个请求消息
message HelloRequest {
    string name = 1;
}

// 包含问候语的响应消息
message HelloReply {
    string message = 1;
}

创建文件后

3、进入GOPATH目录

protoc -I gorpcdemo gorpcdemo/pb/helloworld.proto --go_out=plugins=grpc:gorpcdemo

### Java gRPC 实现示例 以下是基于提供的引用以及 gRPC 官方文档的知识,展示如何通过 Java 编写一个简单的 gRPC 示例。 #### 1. 创建项目并引入依赖 首先,在项目的 `pom.xml` 文件中添加必要的 Maven 依赖项来支持 gRPC 和 Protocol Buffers (protobuf)[^4]: ```xml <dependencies> <!-- gRPC dependency --> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty-shaded</artifactId> <version>1.50.0</version> </dependency> <!-- Protobuf compiler plugin --> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.21.7</version> </dependency> <!-- gRPC protobuf generator --> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.50.0</version> </dependency> <!-- gRPC stubs for client and server --> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>1.50.0</version> </dependency> </dependencies> ``` #### 2. 定义 `.proto` 文件 `.proto` 文件用于描述服务接口和服务消息结构。下面是一个简单的例子[^3]: ```proto syntax = "proto3"; option java_package = "com.example.grpc"; option java_outer_classname = "HelloWorldProto"; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply); } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; } ``` 保存此文件为 `helloworld.proto` 并将其放置在 `src/main/proto` 目录下。 #### 3. 使用 protoc 工具生成 Java 类 运行以下命令以生成客户端和服务器端所需的 Java 类: ```bash protoc --java_out=./generated_src helloworld.proto ``` 这将在指定目录中生成对应的 Java 文件。 #### 4. 实现 Server 端逻辑 编写一个简单的 gRPC 服务端程序如下所示: ```java import io.grpc.Server; import io.grpc.ServerBuilder; public class HelloWorldServer { private int port = 50051; private Server server; public void start() throws IOException, InterruptedException { server = ServerBuilder.forPort(port) .addService(new GreeterImpl()) .build() .start(); System.out.println("Server started on port " + port); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { stop(); } catch (InterruptedException e) { e.printStackTrace(System.err); } })); server.awaitTermination(); } public void stop() throws InterruptedException { if (server != null && !server.isShutdown()) { server.shutdownNow().awaitTermination(30, TimeUnit.SECONDS); } } static class GreeterImpl extends GreeterGrpc.GreeterImplBase { @Override public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { String replyMessage = "Hello " + req.getName(); HelloReply reply = HelloReply.newBuilder().setMessage(replyMessage).build(); responseObserver.onNext(reply); responseObserver.onCompleted(); } } public static void main(String[] args) throws IOException, InterruptedException { new HelloWorldServer().start(); } } ``` #### 5. 实现 Client 端调用 接着构建一个基本的 gRPC 客户端去连接到上述的服务端实例: ```java import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; public class HelloWorldClient { private final ManagedChannel channel; private final GreeterGrpc.GreeterBlockingStub blockingStub; public HelloWorldClient(String host, int port) { this.channel = ManagedChannelBuilder.forAddress(host, port) .usePlaintext() .build(); this.blockingStub = GreeterGrpc.newBlockingStub(channel); } public void shutdown() throws InterruptedException { channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); } public void greet(String name) { HelloRequest request = HelloRequest.newBuilder().setName(name).build(); HelloReply response = blockingStub.sayHello(request); System.out.println(response.getMessage()); } public static void main(String[] args) throws InterruptedException { HelloWorldClient client = new HelloWorldClient("localhost", 50051); try { client.greet("Alice"); } finally { client.shutdown(); } } } ``` 以上代码展示了完整的 gRPC 流程设置过程,包括定义协议缓冲区文件、编译它们成 Java 源码以及开发相应的服务端与客户端应用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值