RPC

Go-grpc配置

Posted by AlstonWilliams on February 17, 2019

最近在研究Docker的源码时,读到libContainerd部分时,发现它用到了grpc.而此前只知道只是一个用于分布式系统中RPC的库.就借着这个机会,学习一下这个工具.

写过Java中的WSDL的朋友,会觉得其实它们的使用非常相似.

安装ProtoBuf 3

因为grpc依赖ProtoBuf,将我们写的服务定义转换成Go文件.所以我们需要安装ProtoBuf.

那为什么要安装ProtoBuf 3这个新出的,各个方面都还不是很完善的版本呢?官网上建议采用这个版本,就安装这个版本喽.如果我们安装ProtoBuf2,以后很可能会有兼容问题.

那如何安装呢?

首先,去ProtoBuf的Github主页下载最新版的ProtoBuf的包.在我写这篇文章时,最新版的是3.0.2.这里因为我们是为Go配置的,所以我们选择protobuf-cpp-3.0.2.tar.gz这个包下载.在Go support for Protocol Buffers上有明确的说明.

下载完成后,我们还需要对其进行编译安装.使用下面的命令: tar zxvf protobuf-cpp-3.0.2.tar.gz cd protobuf-cpp-3.0.2 ./configure make install

然后使用protoc –version命令应该会看到相应的版本号.我这里是libprotoc 3.0.0.如果没有看到,并提示Error while loading shared libraries: libprotobuf.so.10: cannot open shared object file: No such file or directory.那Congratulation,你跟我一样中了彩蛋了.其实我们只需要安装一下libprotoc就可以解决啦.执行下面的这条命令: sudo apt-get install libprotobuf-c0

##配置项目

除此之外,我们还需要在项目中获取protobuf的包.使用下面这条命令: go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

这样我们就获取到了跟protobuf相关的包.我们还需要获取grpc的包: go get google.golang.org/grpc

各位朋友也知道,在国内,访问Google家的产品,GFW总不会让你那么顺利.Google的Docker镜像仓库gcr.io被GFW墙了,而Golang的包仓库google.golang.org又被GFW墙了.所以,你在执行上面的那条命令时,很可能不会成功.

那这可如何是好?

给你张图片自己体会吧.

我推荐各位使用ShadowSocks的这种翻墙方式.然后配合上polipo,将socks5代理转换成http代理,进行翻墙.

在Ubuntu中,一般通过下面两条命令,直接将socks5设置为http代理: ** export http_proxy=socks5://localhost:1080 export https_proxy=socks5://localhost:1080 **

但是,当我们采用这种方式使用**go get **安装包时,老是失败.所以我们需要将socks5代理转换为http代理.

测试成功与否

如果你在上面的步骤中,都没有错误发生,那么应该是成功了……

你信吗?

反正我不信.

实践是检验真理的唯一标准!!

我们进入到google.golang.org_1/grpc/examples/helloworld/这个目录下,可以看到其中有两个子目录:greeter_clientgreeter_server.我们先进入到greeter_server中,执行go run main.go,正确情况下,不会看到任何输出.

然后,新开一个Terminal,进入到greeter_client中,输入go run main.go,会输出:当前时间 + Greeting: Hello world.

总结

如果你还碰到了其他错误.就请自行Google吧.反正我碰到的错误,在这篇文章中,已经告诉你了.