GRPC 配置、使用、安装文档 java-windows-eclipse
2017-01-12 15:22
555 查看
官方文档:http://www.grpc.io/
中文版:https://doc.oschina.net/grpc
目录:
一、利用maven compile 来将proto生成java文件
二、利用exe手动命令生成java文件
三、利用gradle build 来将proto生成java文件
四、编写service 和 client for java
一、利用maven compile 来将proto生成java文件
1.编写 demo.proto 文件
。命名为 : grpc-helloworld.proto .文件内容如下:
(protobuf3 语法:https://developers.google.com/protocol-buffers/docs/proto3)
2.新建maven项目,将.proto放入src/main/proto文件夹下面
3、编写pom.xml文件,引入插件
4、进入pom.xml的文件目录,打开cmd窗口
(shift + 鼠标右键 -->在此处打开命令窗口)输入
5、生成的java 以及grpc文件目录如下:
6、将代码copy到项目src/main/java目录下
刷新项目即可
一、利用maven compile 来将proto生成java文件
1.下载 protocol buffer 2/3
文档介绍:https://developers.google.com/protocol-buffers/docs/proto3
下载地址:https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.2/
下载完成后,添加 window 环境变量(由于我本地有两个版本,故我命名为protoc2/protoc3)添加完成后,进行验证。如下图:
如果出现于作者同样的图,说明安装成功!
2.在编译的 gRPC 的时候 ,protocol buffer 需要将 protoc-gen-grpc-java 作为插件来生成代码,
文档介绍:http://www.grpc.io/docs/quickstart/java.html
下载地址:https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.0.1/
下载完成后,同样的添加到 winddos环境变量中。
3.编写 .proto 文件 。命名为 : grpc-helloworld.proto .文件内容如下:
首先生成Proto 文件
再执行生成命令:( >>> protoc3 --plugin=protoc-gen-grpc-java=D:/sysEnv/protoc-gen-grpc-java.exe --grpc-java_out=java --proto_path=proto proto/g
rpc-helloworld.proto) 生成gRPC文件
如果在这一步的时候,执行失败,请注意路径参数的配置。
4.生成后,会在com.hservice.grpc.schema 包下生存 GreeterGrpc.java 文件。我的生成后java 代码如下:
三、利用gradle build 来将proto生成java文件
1、新建gradle3.0+++版本的gradle项目
2、编写gradle.build文件内容,如下:
3、进入gradle.build文件所在目录,,打开cmd窗口 (shift + 鼠标右键 -->在此处打开命令窗口)输入
gradle build
4、生成的文件目录如下:
然后复制过去就好
projectHome\build\generated\source\proto\main\java
projectHome\build\generated\source\proto\main\grpc
四、编写service 和 client for java
首先你得有:*Grpc.java,*Proto.java,*Builder.java文件
1、编写service,流
①、继承GreeterGrpc.GreeterImplBase
定义一个静态内部类重写你刚才定义的接口,
然后你还的有个start(),stop(),blockUntilShutdown()方法来操作服务端的开始停止,完整代码如下:
2、编写client,流
主要是初始化channel和GreeterStub代码如下:
中文版:https://doc.oschina.net/grpc
目录:
一、利用maven compile 来将proto生成java文件
二、利用exe手动命令生成java文件
三、利用gradle build 来将proto生成java文件
四、编写service 和 client for java
一、利用maven compile 来将proto生成java文件
1.编写 demo.proto 文件
。命名为 : grpc-helloworld.proto .文件内容如下:
(protobuf3 语法:https://developers.google.com/protocol-buffers/docs/proto3)
syntax = "proto3"; option java_multiple_files = true; option java_package = "com.ibm.crl.demo"; option java_outer_classname = "demoProto"; option objc_class_prefix = "HLW"; package demo; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (stream HelloRequest) returns (stream 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; }
2.新建maven项目,将.proto放入src/main/proto文件夹下面
3、编写pom.xml文件,引入插件
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ytf.simple</groupId> <artifactId>protobuf</artifactId> <version>0.0.1-SNAPSHOT</version> <name>simple</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <grpc.version>1.0.1</grpc.version> </properties> <dependencies> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-core</artifactId> <version>${grpc.version}</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-all</artifactId> <version>1.0.1</version> </dependency> <!-- <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>${grpc.version}</version> </dependency> <dependency> <groupId>com.orbitz.consul</groupId> <artifactId>consul-client</artifactId> <version>0.10.0</version> </dependency> --> </dependencies> <build> <finalName>com.ytf.rpc.demo</finalName> <extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>1.5.0.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.1.0:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact> </configuration> <executions> <execution> & 4000 lt;goals> <goal>compile</goal> <goal>compile-custom</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
4、进入pom.xml的文件目录,打开cmd窗口
(shift + 鼠标右键 -->在此处打开命令窗口)输入
mvn compile
5、生成的java 以及grpc文件目录如下:
projectPath\target\generated-sources\protobuf\java projectPath\Path\target\generated-sources\protobuf\grpc-java
6、将代码copy到项目src/main/java目录下
刷新项目即可
一、利用maven compile 来将proto生成java文件
1.下载 protocol buffer 2/3
文档介绍:https://developers.google.com/protocol-buffers/docs/proto3
下载地址:https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.2/
下载完成后,添加 window 环境变量(由于我本地有两个版本,故我命名为protoc2/protoc3)添加完成后,进行验证。如下图:
如果出现于作者同样的图,说明安装成功!
2.在编译的 gRPC 的时候 ,protocol buffer 需要将 protoc-gen-grpc-java 作为插件来生成代码,
文档介绍:http://www.grpc.io/docs/quickstart/java.html
下载地址:https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.0.1/
下载完成后,同样的添加到 winddos环境变量中。
3.编写 .proto 文件 。命名为 : grpc-helloworld.proto .文件内容如下:
syntax = "proto3"; option java_generic_services = true; option java_multiple_files = true; option java_package = "com.hservice.grpc.schema"; 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; }
首先生成Proto 文件
再执行生成命令:( >>> protoc3 --plugin=protoc-gen-grpc-java=D:/sysEnv/protoc-gen-grpc-java.exe --grpc-java_out=java --proto_path=proto proto/g
rpc-helloworld.proto) 生成gRPC文件
如果在这一步的时候,执行失败,请注意路径参数的配置。
4.生成后,会在com.hservice.grpc.schema 包下生存 GreeterGrpc.java 文件。我的生成后java 代码如下:
三、利用gradle build 来将proto生成java文件
1、新建gradle3.0+++版本的gradle项目
2、编写gradle.build文件内容,如下:
3、进入gradle.build文件所在目录,,打开cmd窗口 (shift + 鼠标右键 -->在此处打开命令窗口)输入
gradle build
4、生成的文件目录如下:
然后复制过去就好
projectHome\build\generated\source\proto\main\java
projectHome\build\generated\source\proto\main\grpc
applyplugin:'java' applyplugin:'com.google.protobuf' buildscript{ repositories{ mavenCentral() } dependencies{ // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier // gradle versions classpath'com.google.protobuf:protobuf-gradle-plugin:0.8.0' } } repositories{ mavenLocal() mavenCentral() } // IMPORTANT: You probably want the non-SNAPSHOT version of gRPC. Make sure you // are looking at a tagged version of the example and not "master"! // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. defgrpcVersion ='1.0.1'// CURRENT_GRPC_VERSION dependencies{ compile"io.grpc:grpc-netty:${grpcVersion}" compile"io.grpc:grpc-protobuf:${grpcVersion}" compile"io.grpc:grpc-stub:${grpcVersion}" testCompile"junit:junit:4.11" testCompile"org.mockito:mockito-core:1.9.5" } protobuf { protoc { artifact ='com.google.protobuf:protoc:3.1.0' } plugins{ grpc { artifact ="io.grpc:protoc-gen-grpc-java:${grpcVersion}" } } generateProtoTasks { all()*.plugins{ grpc { // To generate deprecated interfaces and static bindService method, // turn the enable_deprecated option to true below: option'enable_deprecated=false' } } } } // Inform IntelliJ projects about the generated code. applyplugin:'idea' idea { module{ // Not using generatedSourceDirs because of // https://discuss.gradle.org/t/support-for-intellij-2016/15294/8 sourceDirs += file("${projectDir}/build/generated/source/proto/main/java"); sourceDirs += file("${projectDir}/build/generated/source/proto/main/grpc"); } } // Provide convenience executables for trying out the examples. applyplugin:'application' startScripts.enabled = false taskrouteGuideServer(type: CreateStartScripts) { mainClassName ='io.grpc.examples.routeguide.RouteGuideServer' applicationName ='route-guide-server' outputDir =newFile(project.buildDir,'tmp') classpath = jar.outputs.files +project.configurations.runtime } taskrouteGuideClient(type: CreateStartScripts) { mainClassName ='io.grpc.examples.routeguide.RouteGuideClient' applicationName ='route-guide-client' outputDir =newFile(project.buildDir,'tmp') classpath = jar.outputs.files +project.configurations.runtime } taskhelloWorldServer(type: CreateStartScripts) { mainClassName ='io.grpc.examples.helloworld.HelloWorldServer' applicationName ='hello-world-server' outputDir =newFile(project.buildDir,'tmp') classpath = jar.outputs.files +project.configurations.runtime } taskhelloWorldClient(type: CreateStartScripts) { mainClassName ='io.grpc.examples.helloworld.HelloWorldClient' applicationName ='hello-world-client' outputDir =newFile(project.buildDir,'tmp') classpath = jar.outputs.files +project.configurations.runtime } taskcompressingHelloWorldClient(type: CreateStartScripts) { mainClassName ='io.grpc.examples.experimental.CompressingHelloWorldClient' applicationName ='compressing-hello-world-client' outputDir =newFile(project.buildDir,'tmp') classpath = jar.outputs.files +project.configurations.runtime } applicationDistribution.into('bin') { from(routeGuideServer) from(routeGuideClient) from(helloWorldServer) from(helloWorldClient) from(compressingHelloWorldClient) fileMode = 0755 }
四、编写service 和 client for java
首先你得有:*Grpc.java,*Proto.java,*Builder.java文件
1、编写service,流
①、继承GreeterGrpc.GreeterImplBase
定义一个静态内部类重写你刚才定义的接口,
然后你还的有个start(),stop(),blockUntilShutdown()方法来操作服务端的开始停止,完整代码如下:
packagecom.ibm.crl.demo; importjava.io.IOException; importio.grpc.Server; importio.grpc.ServerBuilder; importio.grpc.stub.StreamObserver; publicclassDemoServer { privateServerserver; /* The port on which the server should run */ privateintport= 50051; privatevoidstart()throwsIOException { server= ServerBuilder.forPort(port).addService(newDemoGrpcImpl()).build().start(); System.out.println("server start " +port); Runtime.getRuntime().addShutdownHook(newThread() { @Override publicvoidrun() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); DemoServer.this.stop(); System.err.println("*** server shut down"); } }); } privatevoidstop() { if(server!= null) { server.shutdown(); } } /** * Await termination on the main thread since the grpc library uses daemon threads. */ privatevoidblockUntilShutdown()throwsInterruptedException { if(server!= null) { server.awaitTermination(); } } /** * Main launches the server from the command line. */ publicstaticvoidmain(String[]args)throwsIOException, InterruptedException { finalDemoServerserver = newDemoServer(); server.start(); server.blockUntilShutdown(); } staticclassDemoGrpcImplextendsGreeterGrpc.GreeterImplBase { @Override publicStreamObserver<HelloRequest> sayHello(StreamObserver<HelloReply>responseObserver) { returnnewStreamObserver<HelloRequest>() { privateintcount= 0; publicvoidonNext(HelloRequestreq) { try{ Thread.sleep(2000); }catch(InterruptedExceptione) { e.printStackTrace(); } count++; HelloReplyreply = HelloReply.newBuilder().setMessage("demo " +req.getName()).build(); responseObserver.onNext(reply); System.out.println("resquest:"+ req.getName() + System.currentTimeMillis()); } publicvoidonError(Throwablet) { System.err.println(System.currentTimeMillis() + " : "+ count +"server demo error:"+ t.getMessage()); responseObserver.onError(t); } publicvoidonCompleted() { System.out.println("task finish close session ! someone has died!" + System.currentTimeMillis() +" times:"+ count); responseObserver.onCompleted(); } }; } } } // end
2、编写client,流
主要是初始化channel和GreeterStub代码如下:
packagecom.ibm.crl.demo; importjava.util.concurrent.CountDownLatch; importjava.util.concurrent.TimeUnit; importio.grpc.ManagedChannel; importio.grpc.ManagedChannelBuilder; importio.grpc.examples.helloworld.HelloWorldServer; importio.grpc.stub.StreamObserver; /** * A simple client that requests a greeting from the{@link HelloWorldServer}. * b43d / publicclassDemoClient { privatefinalManagedChannelchannel; privatefinalGreeterGrpc.GreeterStubstub; privateintcount= 1; /** Construct client connecting to HelloWorld server at {@code host:port}. */ publicDemoClient(Stringhost,intport) { this(ManagedChannelBuilder.forAddress(host,port).usePlaintext(true)); } /** Construct client for accessing RouteGuide server using the existing channel. */ DemoClient(ManagedChannelBuilder<?>channelBuilder) { channel= channelBuilder.build(); stub= GreeterGrpc.newStub(channel); } publicvoidshutdown()throwsInterruptedException { channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); } /** Say hello to server. */ publicvoidgreet(Stringname) { try{ finalCountDownLatchfinishLatch = newCountDownLatch(1); StreamObserver<HelloRequest>ob =stub.sayHello(newStreamObserver<HelloReply>() { @Override publicvoidonNext(HelloReplyvalue) { System.out.println("response:"+ value.getMessage() + count); count++; } publicvoidonError(Throwablet) { System.err.println("client demo error:" +t.getMessage()); finishLatch.countDown(); } publicvoidonCompleted() { System.out.println("finished demo"); finishLatch.countDown(); } }); Thread.sleep(400); HelloRequestreply = HelloRequest.newBuilder().setName(name).build(); System.out.println(System.currentTimeMillis()); for(inti= 0; i< 1; i++) { ob.onNext(reply); } ob.onCompleted(); }catch(Exceptione) { e.printStackTrace(); } } /** * Greet server. If provided, the first element of {@code args} is the name to use in the * greeting. 客户端如果5秒没收到响应,则断开连接。 */ publicstaticvoidmain(String[]args)throwsException { longstart= System.currentTimeMillis(); DemoClientclient = newDemoClient("localhost", 50051); try{ /* Access a service running on the local machine on port 50051 */ Stringuser ="world"; client.greet(user); System.out.println("耗时:"+ (System.currentTimeMillis() -start) +"ms"); }finally{ client.shutdown(); } System.out.println( System.currentTimeMillis() +"耗时:"+ (System.currentTimeMillis() -start) +"ms"); } }
相关文章推荐
- MyEclipse Web Project转Eclipse Dynamic Web Project
- Windows Clang开发环境备忘
- Gradle eclipse plugin how to attach dependency source code
- Gradle eclipse plugin how to attach dependency source code
- 傻瓜式用Eclipse连接MySQL数据库
- 简单解析JavaScript中的__proto__属性
- 深入浅析JavaScript中prototype和proto的关系
- Eclipse引入jquery报错如何解决
- 让Flex Builder 3.0与Eclipse3.4整合起来
- Eclipse 误删文件的恢复与代码的恢复详解
- Eclipse配置Javascript开发环境图文教程
- 使用zend studio for eclipse不能激活代码提示功能的解决办法
- Eclipse 导出可执行Java工程/可执行Jar文件(包含第三方Jar包)
- 图解Eclipse j2ee开发环境的搭建过程
- 两种Eclipse部署动态web项目方法
- ext for eclipse插件安装方法
- 解决Fedora14下eclipse进行android开发,ibus提示没有输入窗口的方法详解
- eclipse导入jquery包后报错的解决方法
- Eclipse 格式化代码时不换行与自动换行的实现方法
- Eclipse下jQuery文件报错出现错误提示红叉