无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。
安装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 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文件如下:
4.0.0 grpc
grpc
0.0.1-SNAPSHOT
jar grpc
http://maven.apache.org UTF-8
1.0.1
io.grpc
grpc-netty
${grpc.version}
io.grpc
grpc-protobuf
${grpc.version}
io.grpc
grpc-stub
${grpc.version}
com.google.protobuf
protobuf-java
3.1.0
io.grpc
grpc-core
${grpc.version}
io.grpc
grpc-all
${grpc.version}
com.ytf.rpc.demo
kr.motd.maven
os-maven-plugin
1.5.0.Final
org.xolstice.maven.plugins
protobuf-maven-plugin
0.5.0
com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier}grpc-java【【JAVA】gRPC使用】io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}
compile
compile-custom
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.8
1.8
文章图片
这是官网的一张图,支持多语言
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)