我所在公司的項目是采用基于Restful的微服務架構,隨著微服務之間的溝通越來越頻繁,就希望可以做成用rpc來做內部的通訊,對外依然用Restful。于是就想到了google的grpc。
使用grpc的優(yōu)點很多,二進制的數(shù)據(jù)可以加快傳輸速度,基于http2的多路復用可以減少服務之間的連接次數(shù),和函數(shù)一樣的調用方式也有效的提升了開發(fā)效率。
不過使用grpc也會面臨一個問題,我們的微服務對外一定是要提供Restful接口的,如果內部調用使用grpc,在某些情況下要同時提供一個功能的兩套API接口,這樣就不僅降低了開發(fā)效率,也增加了調試的復雜度。于是就想著有沒有一個轉換機制,讓Restful和gprc可以相互轉化。
在網(wǎng)上看到一個解決方案,https://github.com/grpc-ecosystem/grpc-gateway,簡單的說就是有一個網(wǎng)關服務器負責轉化和代理轉發(fā)。
如下圖:
安裝
首先要安裝ProtocolBuffers 3.0及以上版本。
mkdir tmp cd tmp git clone https://github.com/google/protobufcd protobuf ./autogen.sh ./configuremakemake check sudo make install
然后使用go get獲取grpc-gateway。
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gatewaygo get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swaggergo get -u github.com/golang/protobuf/protoc-gen-go
這里最好把編譯生成的二進制文件的目錄放在
延伸閱讀
學習是年輕人改變自己的最好方式