千家信息网

如何将Grpc添加到您的Java应用程序

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要为大家展示了"如何将Grpc添加到您的Java应用程序",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何将Grpc添加到您的Java应用程序"
千家信息网最后更新 2025年02月23日如何将Grpc添加到您的Java应用程序

这篇文章主要为大家展示了"如何将Grpc添加到您的Java应用程序",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何将Grpc添加到您的Java应用程序"这篇文章吧。

Grpc是一个高性能、开源的通用 RPC 框架。

使用 gRPC 有多种好处:

  • 它通过提供客户端/服务器代码来简化开发

  • 它支持多种语言

这一切都始于定义一个 .proto 文件,.proto 文件是位于 src/main/proto 文件中。

请注意:将 proto 文件保存在 repo 上并进行一些模式版本控制是一种很好的做法。通过这种方式,其他团队的开发人员可以通过引用它们来生成他们的 sdk,甚至适用于其他语言。

我们将在 src/main/proto/Order.proto 上创建一个订单服务

yntax = "proto3";option java_multiple_files = true;option java_package = "com.egkatzioura.order.v1";service OrderService {    rpc ExecuteOrder(OrderRequest) returns (OrderResponse) {};}message OrderRequest {    string email = 1;    string product = 2;    int32 amount = 3;}message OrderResponse {    string info = 1;}

为了使用 grpc,需要放置以下相关文件

            io.grpc            grpc-netty-shaded            1.39.0                            io.grpc            grpc-protobuf            1.39.0                            io.grpc            grpc-stub            1.39.0                             org.apache.tomcat            annotations-api            6.0.53            provided        
                                    kr.motd.maven                os-maven-plugin                1.6.2                                                        org.xolstice.maven.plugins                protobuf-maven-plugin                0.6.1                                    com.google.protobuf:protoc:3.17.2:exe:${os.detected.classifier}                    grpc-java                    io.grpc:protoc-gen-grpc-java:1.39.0:exe:${os.detected.classifier}                                                                                                        compile                            compile-custom                                                                                    

通过执行 mvn clean install,将在目标/类上生成类。这些类足以启动服务器并运行客户端与它进行通信。

因此,让我们尝试启动服务器。

我们将创建一个服务实现:

package com.egkatzioura.order.impl; import com.egkatzioura.order.v1.Order;import com.egkatzioura.order.v1.OrderServiceGrpc; import io.grpc.stub.StreamObserver; public class OrderServiceImpl extends OrderServiceGrpc.OrderServiceImplBase {     @Override    public void executeOrder(Order.OrderRequest request, StreamObserver<Order.OrderResponse> responseObserver) {         Order.OrderResponse response = Order.OrderResponse.newBuilder()                                                          .setInfo("Hi "+request.getEmail()+", you order has been executed")                                                          .build();         responseObserver.onNext(response);        responseObserver.onCompleted();    }}

然后我们的主类将启动服务器并为请求提供服务:

package com.egkatzioura.order; import java.io.IOException; import com.egkatzioura.order.impl.OrderServiceImpl;import io.grpc.Server;import io.grpc.ServerBuilder; public class Application {     public static void main(String[] args) throws IOException, InterruptedException {        Server server = ServerBuilder                .forPort(8080)                .addService(new OrderServiceImpl()).build();         server.start();        server.awaitTermination();    } }

当服务器运行时,我们可以启动另一个主类,该类将与服务器通信并向服务器执行 grpc 请求:

package com.egkatzioura.order; import com.egkatzioura.order.v1.Order;import com.egkatzioura.order.v1.OrderServiceGrpc; import io.grpc.ManagedChannel;import io.grpc.ManagedChannelBuilder; public class ApplicationClient {    public static void main(String[] args) {        ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8080)                                                      .usePlaintext()                                                      .build();         OrderServiceGrpc.OrderServiceBlockingStub orderServiceBlockingStub                = OrderServiceGrpc.newBlockingStub(managedChannel);         Order.OrderRequest orderRequest = Order.OrderRequest.newBuilder()                                             .setEmail("hello@word.com")                                             .setProduct("no-name")                                             .setAmount(3)                                             .build();         Order.OrderResponse orderResponse = orderServiceBlockingStub.executeOrder(orderRequest);         System.out.println("Received response: "+orderResponse.getInfo());         managedChannel.shutdown();    }}

所以我们只是自动生成了 grpc 代码,我们用一个实现支持了一个 grpc 服务,一个服务器启动了,一个客户端从服务器得到了响应。

以上是"如何将Grpc添加到您的Java应用程序"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0