grpc java helloworld 简单demo实现
来源:互联网 发布:纸模型软件 编辑:程序博客网 时间:2024/05/02 00:16
写在前面
最近google发布了grpc1.0,之前一直关注过grpc,数据交互使用了protocol buffer,相比之前使用的hession和json序列化方式性能应该提升不少,所有先搞一个grpc的hello world跑一下,项目使用maven搭建,并使用idea开发。
使用idea创建maven项目,添加pom配置
添加grpc1.0 maven依赖
<dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>1.0.0</version> </dependency>
配置protobuf maven插件
配置了protobuf 插件后,可以自动将.proto文件生成对应的java代码
<build> <extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>1.4.1.Final</version> </extension> </extensions> <plugins> <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.5.0</version> <configuration> <protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.0:exe:${os.detected.classifier}</pluginArtifact> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>compile-custom</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
编写proto文件 helloworld.proto
syntax = "proto3";option java_multiple_files = true;option java_package = "io.grpc.examples.helloworld";option java_outer_classname = "HelloWorldProto";option objc_class_prefix = "HLW";package helloworld;// 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 greetingsmessage HelloReply { string message = 1;}
编写grpc 服务端HelloWorldServer.java
package com;import io.grpc.Server;import io.grpc.ServerBuilder;import io.grpc.examples.helloworld.GreeterGrpc;import io.grpc.examples.helloworld.HelloReply;import io.grpc.examples.helloworld.HelloRequest;import io.grpc.stub.StreamObserver;import java.io.IOException;public class HelloWorldServer { private int port = 50051; private Server server; private void start() throws IOException { server = ServerBuilder.forPort(port) .addService(new GreeterImpl()) .build() .start(); System.out.println("service start..."); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.err.println("*** shutting down gRPC server since JVM is shutting down"); HelloWorldServer.this.stop(); System.err.println("*** server shut down"); } }); } private void stop() { if (server != null) { server.shutdown(); } } // block 一直到退出程序 private void blockUntilShutdown() throws InterruptedException { if (server != null) { server.awaitTermination(); } } public static void main(String[] args) throws IOException, InterruptedException { final HelloWorldServer server = new HelloWorldServer(); server.start(); server.blockUntilShutdown(); } // 实现 定义一个实现服务接口的类 private class GreeterImpl extends GreeterGrpc.GreeterImplBase { public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { System.out.println("service:"+req.getName()); HelloReply reply = HelloReply.newBuilder().setMessage(("Hello: " + req.getName())).build(); responseObserver.onNext(reply); responseObserver.onCompleted(); } }}
编写grpc 客户端 HelloWorldClient.java
package com;import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder;import io.grpc.examples.helloworld.GreeterGrpc; import io.grpc.examples.helloworld.HelloReply; import io.grpc.examples.helloworld.HelloRequest;import java.util.concurrent.TimeUnit; public class HelloWorldClient { private final ManagedChannel channel; private final GreeterGrpc.GreeterBlockingStub blockingStub; public HelloWorldClient(String host,int port){ channel = ManagedChannelBuilder.forAddress(host,port) .usePlaintext(true) .build(); 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("127.0.0.1",50051); for(int i=0;i<5;i++){ client.greet("world:"+i); } } }
项目完整结构
项目运行结果
服务端
客户端
0 1
- grpc java helloworld 简单demo实现
- grpc java helloworld 简单demo实现
- grpc java helloworld 简单demo实现
- java gRPC之helloworld
- Ubuntu&GRPC+Idea java demo
- JNI实现简单HelloWorld的Demo
- grpc-demo
- java maven工程中grpc配置demo
- 用Jersey简单实现的helloworld demo版
- grpc的java实现,从无到有
- golang grpc服务端客户端简单源码实现
- java 实现简单http服务端,客户端DEMO
- java实现文件上传的简单demo
- java实现邮件发送简单demo
- Java RMI之HelloWorld 与 Java简单实现RPC
- JNI简单实现Java调用C++/C的HelloWorld
- JNI简单实现Java调用C++/C的HelloWorld
- JNI简单实现Java调用C++/C的HelloWorld
- Linux Framebuffer 截屏方法
- Javascript中的素数筛选
- windows下忘记密码重置mysql密码的步骤
- linux 下安装zookeeper及配置dubbo
- Awk
- grpc java helloworld 简单demo实现
- Git版本恢复命令reset
- stub 和 skeleton 的简单实现
- Android替换/修改系统默认输入法
- 前端静态资源版本更新与缓存之——通过gulp 在原html文件上自动化添加js、css版本号
- POJ 1741 点分治(点剖)の学习以及模板
- poj2349
- POJ 3484(规律+二分)
- Go中的素数筛选