MacOS Java+golang build protoc gRPC 代码生成
MacOS Java+golang gRPC 代码生成
编译protobuf/protoc 工具
git clone https://github.com/protocolbuffers/protobuf.git
git checkout 3.3.x
mac 环境安装autoconf automake
brew install autoconf
brew install automake
build protobuf
cd protobuf
./autogen.sh
./configure
make
sudo make install
编译grpc-java
下载grpc-java
git clone https://github.com/grpc/grpc-java.git
git checkout git checkout v1.4.x
编译grpc-java
cd grpc-java
./gradlew build
生成目标文件compiler/build/exe/java_plugin/protoc-gen-grpc-java
准备grpc-go
下载grpc-java
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u google.golang.org/grpc
go install github.com/golang/protobuf/protoc-gen-go
protoc-gen-go需要放到环境变量里,让protoc程序能找到。
java 端生成代码
option java_package="com.dtstack.rdslite.task.engine.rpc";
protoc --plugin=protoc-gen-grpc-java=/Users/hx/workspace/java/github/grpc-java/compiler/build/exe/java_plugin/protoc-gen-grpc-java --grpc-java_out="./" "./service.proto"
golang 端生成代码
protoc -I=. -I=/Users/hx/workspace/go/src/ -I=/Users/hx/workspace/go/src/github.com/gogo/protobuf/protobuf/ \
--go_out=Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/duration.proto=github.com/gogo/protobuf/types,plugins=grpc:test service.proto
#-I=. 指向proto文件位置
#-I=/Users/hx/workspace/go/src/ #GOPATH
#-I=/Users/hx/workspace/go/src/github.com/gogo/protobuf/protobuf #依赖头文件
# --go_out= 说明参考https://github.com/gogo/protobuf
#test是生成目录
service.proto
syntax = "proto3";
package proto;
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
option (gogoproto.goproto_stringer_all) = false;
option (gogoproto.goproto_enum_prefix_all) = false;
option (gogoproto.goproto_getters_all) = false;
option (gogoproto.equal_all) = true;
option (gogoproto.verbose_equal_all) = true;
option (gogoproto.stringer_all) = true;
option (gogoproto.gostring_all) = true;
option (gogoproto.description_all) = true;
option (gogoproto.populate_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.marshaler_all) = true;
option (gogoproto.sizer_all) = true;
option (gogoproto.goproto_enum_stringer_all) = false;
option (gogoproto.enum_stringer_all) = true;
option (gogoproto.unsafe_marshaler_all) = false;
option (gogoproto.unsafe_unmarshaler_all) = false;
service EasyAgentService {
rpc registerSidecar(RegisterRequest) returns (RegisterResponse);
rpc readyForControl(ControlRequest) returns (stream ControlResponse);
rpc reportEvent(Event) returns (EmptyResponse);
}
service TransferService {
rpc send(Msg) returns (EmptyResponse);
}
message Msg {
string id = 1;
string index = 2;
string typ = 3;
bytes jsonBytes = 4;
bytes key = 5;
}
message EmptyResponse {}
message SidecarRequestHeader {
bytes id = 1 [(gogoproto.customtype) = "Uuid", (gogoproto.nullable) = false];
google.protobuf.Timestamp systime = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
}
// Register
message RegisterRequest {
SidecarRequestHeader H = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
}
message RegisterResponse {
}
// Controlling
message ControlRequest {
SidecarRequestHeader H = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
}
message ControlResponse {
enum ControlCmd {
}
ControlCmd cmd = 1;
uint32 seqno = 2;
oneof options {
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
1. 认识 Rxjs
存在的问题 在网页的世界存取任何资源都是非同步(Async)的,比如说我们希望拿到一个档案,要先发送一个请求,然后必须等到档案回来,再执行对这个档案的操作。这就是一个非同步的行为,而随著网页需求的复杂化,我们所写的 JavaScript 就有各种针对非同步行为的写法,例如使用 callback 或是 Promise 物件甚至是新的语法糖 async/await —— 但随著应用需求越来越复杂,编写非同步的代码仍然非常困难。 非同步常见的问题 竞态条件 (Race Condition) 内存泄漏 (Memory Leak) 复杂的状态 (Complex State) 异常处理 (Exception Handling) Race Condition 每当我们对同一个资源同时做多次的非同步存取时,就可能发生 Race Condition 的问题。比如说我们发了一个 Request 更新使用者资料,然后我们又立即发送另一个 Request 取得使用者资料,这时第一个 Request 和第二个 Request 先后顺序就会影响到最终接收到的结果不同,这就是 Race Condition。 Mem...
-
下一篇
Java面试整理《上》
一、Java基础部分 简单介绍下Java的跨平台原理不同的操作系统的操作指令集不同,所以做程序开发的时候需要根据不同的操作系统开发程序。比如想要程序支持MacOS、Windows和Linux就要开发三套不同的程序代码。这会导致开发成本成倍提升,所以很多程序都只开发了windows版本。这是相对于桌面程序来说的,如果是WEB应用程序就没有这个烦恼,这也是WEB开发这么流行的原因。Sun公司开发了适用于不同操作系统及位数的JVM虚拟机来屏蔽系统之间的差异并提供了统一的接口,对于Java程序而言,只需要遵循Java语言规范,就可以在所有的操作系统上运行程序。 Java中int数据占用几个字节?int数据占用4个字节,这在哪个位数操作系统上都是一样的,主要是为了跟CPU的字长一致,目的当然是提高处理速度。 Java面向对象有哪些特征?主要有四个特征:抽象,封装,继承和多态。 抽象的目的是忽略与主题无关的其他信息,使用abstract关键字修饰,规定抽象方法只能为public/protected,被修饰的类不能被实例化,只允许通过继承的方式来实现。 封装的意思就是想让你看到就让你看到不想让你看到...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- MySQL数据库在高并发下的优化方案
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Dcoker安装(在线仓库),最新的服务器搭配容器使用