【JAVA】gRPC使用
来源:互联网 发布:ubuntu 解压缩 编辑:程序博客网 时间:2024/05/17 23:03
安装proto 3.+版本
参照http://blog.csdn.net/simonchi/article/details/76495696
写好proto文件
peroson.proto 对象定义文件
syntax="proto3";package com.cmcc.protobuf;option java_outer_classname="PersonProbuf";message Person {string username=1;int32 age=2;string sex=3;}message Req {string username=1;}message Resp {Person person=1;}service.proto 服务定义文件
syntax="proto3";package com.cmcc.protobuf;import "person.proto";service UserService {rpc query(Req) returns (Resp) {}}具体proto文件的语法参照官方https://developers.google.com/protocol-buffers/docs/proto3
然后通过proto生成person和service的代码
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
然后执行mvn clean install最后会在target目录下生成服务的rpc的代码,拷贝到src目录下即可
编写服务端代码
package com.cmcc.grpc;import io.grpc.Server;import io.grpc.ServerBuilder;import io.grpc.stub.StreamObserver;import com.cmcc.protobuf.PersonProbuf;import com.cmcc.protobuf.PersonProbuf.Req;import com.cmcc.protobuf.PersonProbuf.Resp;import com.cmcc.protobuf.UserServiceGrpc;/** * @Type GrpcServer.java * @Desc * @author chiwei * @date 2017年8月2日 下午2:51:12 * @version *//** * @author chiwei * */public class GrpcServer { private int port = 50011; private Server server; private void start() throws Exception { server = ServerBuilder.forPort(port).addService(new UserServiceImpl()).build().start(); System.out.println("user service start ..."); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { // TODO Auto-generated method stub super.run(); System.out.println("shutting down gRPC server since JVM is shutting down"); GrpcServer.this.stop(); System.out.println("server shut down"); } }); } private void stop() { if (server != null) { server.shutdown(); } } private void blockUntilShutdown() throws Exception { if (server != null) { server.awaitTermination(); } } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub GrpcServer server = new GrpcServer(); server.start(); server.blockUntilShutdown(); } private class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase { @Override public void query(Req request, StreamObserver<Resp> responseObserver) { // TODO Auto-generated method stub System.out.println("service:" + request.getUsername()); PersonProbuf.Person rp = PersonProbuf.Person.newBuilder() .setUsername(request.getUsername()).setAge(100).build(); Resp resp = Resp.newBuilder().setPerson(rp).build(); responseObserver.onNext(resp); responseObserver.onCompleted(); } }}/** * Revision history * ------------------------------------------------------------------------- * * Date Author Note * ------------------------------------------------------------------------- * 2017年8月2日 chiwei create */
编写客户端代码
package com.cmcc.grpc;import io.grpc.ManagedChannel;import io.grpc.ManagedChannelBuilder;import java.util.concurrent.TimeUnit;import com.cmcc.protobuf.PersonProbuf.Req;import com.cmcc.protobuf.PersonProbuf.Resp;import com.cmcc.protobuf.UserServiceGrpc;/** * @Type GrpcClient.java * @Desc * @author chiwei * @date 2017年8月2日 下午3:20:09 * @version *//** * @author chiwei * */public class GrpcClient { private ManagedChannel channel; private UserServiceGrpc.UserServiceBlockingStub blockingStub; public GrpcClient(String host, int port) { channel = ManagedChannelBuilder.forAddress(host, port).usePlaintext(true).build(); blockingStub = UserServiceGrpc.newBlockingStub(channel); } public void shutdown() throws Exception { channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); } public void query(String name) { Req req = Req.newBuilder().setUsername(name).build(); Resp resp = blockingStub.query(req); System.out.println("客户端获取服务端响应信息:" + resp.getPerson()); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub GrpcClient client = new GrpcClient("127.0.0.1", 50011); for (int i = 0; i < 5; i++) { client.query("chiwei" + i); } }}/** * Revision history * ------------------------------------------------------------------------- * * Date Author Note * ------------------------------------------------------------------------- * 2017年8月2日 chiwei create */
执行即可。
pom文件如下:
<project xmlns="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>grpc</groupId><artifactId>grpc</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>grpc</name><url>http://maven.apache.org</url><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>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</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>${grpc.version}</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><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>
这是官网的一张图,支持多语言
阅读全文
0 0
- 【JAVA】gRPC使用
- GRPC 配置、使用、安装文档 java-windows
- java中使用grpc和protobuf
- grpc(1):Centos 安装java的grpc服务,使用haproxy进行负载均衡,nginx不支持
- 使用 Protocol Buffer 3 生成 gRPC Java 代码方法
- GRPC 配置、使用、安装文档 java-windows-eclipse
- grpc java 拦截器的使用(包含server&client)
- gRPC使用的分析
- C# 使用 grpc
- vs2015编译使用GRPC
- c#使用grpc
- 使用Go开发gRPC
- golang gRPC使用
- Unity2017可以使用grpc
- gRPC的使用(cpp)
- C#中使用gRPC
- Grpc使用实践总结
- Grpc-java MacOS编译
- Intellij IDEA 2017 详细图文教程之概述
- 支付宝借呗到底上不上征信?
- hdfs心跳机制
- NYOJ- 737 石子合并(一)(dp+多种方法实现)
- 用 Unity 和 HTC Vive 实现高级 VR 机制(1)
- 【JAVA】gRPC使用
- 日期和时间函数date( )
- 事务的4种隔离级别
- caffe训练的时候减去pixel-mean和image-mean的区别
- POJ-2823--Sliding Window--双端队列实现单调队列
- Mysql字符集设置指南_MySQL教程
- OAI搭建之ENB
- redis 多个项目之间消息队列传递
- rabbitmq 管理 及 常用命令