这篇文章主要为大家展示了“如何将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
,需要放置以下相关文件
<dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty-shaded</artifactId> <version>1.39.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.39.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>1.39.0</version> </dependency> <dependency> <!-- necessary for Java 9+ --> <groupId>org.apache.tomcat</groupId> <artifactId>annotations-api</artifactId> <version>6.0.53</version> <scope>provided</scope> </dependency
<build> <extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>1.6.2</version> </extension> </extensions> <plugins> <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <protocArtifact>com.google.protobuf:protoc:3.17.2:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.39.0:exe:${os.detected.classifier}</pluginArtifact> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>compile-custom</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
通过执行 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&lt;Order.OrderResponse&gt; 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应用程序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。