婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang 微服務之gRPC與Protobuf的使用

golang 微服務之gRPC與Protobuf的使用

熱門標簽:賺地圖標注的錢犯法嗎 廣東語音外呼系統供應商 福州鐵通自動外呼系統 地圖標注測試 濮陽自動外呼系統代理 烏魯木齊人工電銷機器人系統 澳門防封電銷卡 智能電銷機器人營銷 長沙ai機器人電銷

RPC是什么?

所謂RPC(remote procedure call 遠程過程調用)框架實際是提供了一套機制,使得應用程序之間可以進行通信,而且也遵從server/client模型。使用的時候客戶端調用server端提供的接口就像是調用本地的函數一樣。

gRPC是什么?

與許多RPC系統一樣,gRPC基于定義服務的思想,指定可以使用其參數和返回類型遠程調用的方法。默認情況下,gRPC使用協議緩沖區作為接口定義語言(IDL)來描述服務接口和有效負載消息的結構。

gRPC有什么好處以及在什么場景下需要用gRPC

既然是server/client模型,那么我們直接用restful api不是也可以滿足嗎,為什么還需要RPC呢?下面我們就來看看RPC到底有哪些優勢

gRPC vs. Restful API

gRPC和restful API都提供了一套通信機制,用于server/client模型通信,而且它們都使用http作為底層的傳輸協議(嚴格地說, gRPC使用的http2.0,而restful api則不一定)。不過gRPC還是有些特有的優勢,如下:

  • gRPC可以通過protobuf來定義接口,從而可以有更加嚴格的接口約束條件。關于protobuf可以參見筆者之前的小文Google Protobuf簡明教程
  • 另外,通過protobuf可以將數據序列化為二進制編碼,這會大幅減少需要傳輸的數據量,從而大幅提高性能。
  • gRPC可以方便地支持流式通信(理論上通過http2.0就可以使用streaming模式, 但是通常web服務的restful api似乎很少這么用,通常的流式數據應用如視頻流,一般都會使用專門的協議如HLS,RTMP等,這些就不是我們通常web服務了,而是有專門的服務器應用。)

使用場景

  • 需要對接口進行嚴格約束的情況,比如我們提供了一個公共的服務,很多人,甚至公司外部的人也可以訪問這個服務,這時對于接口我們希望有更加嚴格的約束,我們不希望客戶端給我們傳遞任意的數據,尤其是考慮到安全性的因素,我們通常需要對接口進行更加嚴格的約束。這時gRPC就可以通過protobuf來提供嚴格的接口約束。
  • 對于性能有更高的要求時。有時我們的服務需要傳遞大量的數據,而又希望不影響我們的性能,這個時候也可以考慮gRPC服務,因為通過protobuf我們可以將數據壓縮編碼轉化為二進制格式,通常傳遞的數據量要小得多,而且通過http2我們可以實現異步的請求,從而大大提高了通信效率。

但是,通常我們不會去單獨使用gRPC,而是將gRPC作為一個部件進行使用,這是因為在生產環境,我們面對大并發的情況下,需要使用分布式系統來去處理,而gRPC并沒有提供分布式系統相關的一些必要組件。而且,真正的線上服務還需要提供包括負載均衡,限流熔斷,監控報警,服務注冊和發現等等必要的組件。不過,這就不屬于本篇文章討論的主題了,我們還是先繼續看下如何使用gRPC。

gRPC的使用通常包括如下幾個步驟

  • 通過protobuf來定義接口和數據類型
  • 編寫gRPC server端代碼
  • 編寫gRPC client端代碼

protobuf的安裝

mac:brew install protobuf

windows:protoc 下載:官方地址,然后將 bin 路徑添加到 path 環境變量下去

linux:

安裝需要的依賴包:

[root@localhost ~]# yum -y install autoconf automake libtool curl make g++ unzip 
[root@localhost ~]# unzip protobuf-master.zip 
[root@localhost ~]# cd protobuf-master 

生成configure文件的腳本文件,如果不執行這步,以下操作將通不過

[root@localhost protobuf-master]# ./autogen.sh 
[root@localhost protobuf-master]# ./configure 

可以修改安裝目錄通過 ./configure --prefix=命令,統一安裝在/usr/local/protobuf下

[root@localhost protobuf-master]# ./configure --prefix=/usr/local/protobuf 
[root@localhost protobuf-master]# make
[root@localhost protobuf-master]# make check
[root@localhost protobuf-master]# make install 
[root@localhost protobuf-master]# ldconfig # refresh shared library cache. 

安裝成功

[root@localhost protobuf-master]# protoc -I=./ --cpp_out=./ test.proto

安裝grpc包

go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u google.golang.org/grpc
protoc --go_out=plugins=grpc:. *.proto

定義接口和數據類型

syntax = "proto3";

package rpc_package;

// define a service
service HelloWorldService {
 // define the interface and data type
 rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// define the data type of request
message HelloRequest {
 string name = 1;
}

// define the data type of response
message HelloReply {
 string message = 1;
}

使用protobuf生成工具生成對應語言的庫函數

protoc --go_out=plugins=grpc:. helloworld.proto

server.go

// server.go
 
import (
 "log"
 "net"
 
 "golang.org/x/net/context"
 "google.golang.org/grpc"
 pb "helloworld/helloworld"
)
 
const (
 port = ":50051"
)
 
type server struct {}
 
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
 return pb.HelloReply{Message: "Hello " + in.Name}, nil
}
 
func main() {
 lis, err := net.Listen("tcp", port)
 if err != nil {
  log.Fatal("failed to listen: %v", err)
 }
 s := grpc.NewServer()
 pb.RegisterGreeterServer(s, server{})
 s.Serve(lis)
}

client.go

package main
 
//client.go
 
import (
 "log"
 "os"
 
 "golang.org/x/net/context"
 "google.golang.org/grpc"
 pb "helloworld/helloworld"
)
 
const (
 address  = "localhost:50051"
 defaultName = "world"
)
 
func main() {
 conn, err := grpc.Dial(address, grpc.WithInsecure())
 if err != nil {
  log.Fatal("did not connect: %v", err)
 }
 defer conn.Close()
 c := pb.NewGreeterClient(conn)
 
 name := defaultName
 if len(os.Args) >1 {
  name = os.Args[1]
 }
 r, err := c.SayHello(context.Background(), pb.HelloRequest{Name: name})
 if err != nil {
  log.Fatal("could not greet: %v", err)
 }
 log.Printf("Greeting: %s", r.Message)
}

以上就是golang 微服務之gRPC與Protobuf的使用的詳細內容,更多關于golang gRPC與Protobuf的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 在go語言中安裝與使用protobuf的方法詳解
  • golang grpc 負載均衡的方法
  • 詳解golang consul-grpc 服務注冊與發現
  • go grpc安裝使用教程

標簽:西雙版納 太原 慶陽 調研邀請 德州 貴陽 阿克蘇 廣西

巨人網絡通訊聲明:本文標題《golang 微服務之gRPC與Protobuf的使用》,本文關鍵詞  golang,微,服務,之,gRPC,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang 微服務之gRPC與Protobuf的使用》相關的同類信息!
  • 本頁收集關于golang 微服務之gRPC與Protobuf的使用的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品国产成人国产三级 | 五月综合激情日本mⅴ| 热久久免费视频| 成人av综合在线| 国产精品伦理一区二区| 91在线视频官网| 亚洲免费观看高清完整版在线观看熊 | 亚洲色图欧洲色图婷婷| 日本亚洲天堂网| 欧美日韩三级在线| 亚洲三级电影网站| 免费欧美高清视频| 欧美一区二区三区播放老司机| 国产精品久久久久国产精品日日| 黄色小说综合网站| 精品乱人伦小说| 国产麻豆91精品| 日韩精品一区二区三区在线观看 | 亚洲福利电影网| 成人白浆超碰人人人人| 精品国产乱码久久久久久牛牛| 婷婷六月综合亚洲| 国产精品77777竹菊影视小说| 日韩欧美激情在线| 国产伦精品一区二区三区视频青涩 | 国产精品一区二区91| 99精品视频一区二区三区| 亚洲天堂免费在线观看视频| 成人av一区二区三区| 中文字幕高清一区| 91玉足脚交白嫩脚丫在线播放| 亚洲四区在线观看| 欧美精品丝袜中出| 经典三级视频一区| 欧美电视剧在线看免费| 国产精品1区二区.| 亚洲高清久久久| 国产清纯在线一区二区www| 一本高清dvd不卡在线观看| 日韩在线一区二区| 久久久精品黄色| 欧美一区二区三区人| eeuss鲁片一区二区三区在线看| 丝袜亚洲另类欧美| 一区二区欧美精品| 中文字幕在线不卡一区| 99久久久久久99| 精品制服美女丁香| 日韩国产精品久久| 一区二区高清免费观看影视大全| 精品美女一区二区三区| 51精品视频一区二区三区| 欧美在线不卡一区| 从欧美一区二区三区| 国产精品888| 成人午夜精品在线| 99精品国产91久久久久久| 国产成人av一区二区| 国产成人免费在线视频| 丁香婷婷综合激情五月色| 国产毛片精品视频| 国产很黄免费观看久久| 国产一区在线观看麻豆| 国产成人午夜精品影院观看视频| 久久精品国产色蜜蜜麻豆| 亚洲欧美一区二区久久| 亚洲另类中文字| 亚洲h精品动漫在线观看| 美女免费视频一区| 成人手机电影网| 欧美日韩中文精品| 精品国产乱码久久久久久夜甘婷婷 | 欧美日韩第一区日日骚| 欧美二区在线观看| 2020日本不卡一区二区视频| 亚洲精品成人精品456| 久88久久88久久久| av资源网一区| 26uuu欧美| 欧美男男青年gay1069videost| 国产福利一区二区三区视频| 91麻豆精东视频| 精品国产污网站| 亚洲国产精品一区二区www| 91麻豆精品国产91| 国产精品久久久久久久蜜臀| 日本成人在线电影网| 欧美色倩网站大全免费| 国产清纯白嫩初高生在线观看91 | 91国产丝袜在线播放| 国产亲近乱来精品视频| 视频一区二区欧美| 久久精品夜色噜噜亚洲a∨| 亚洲一区二区三区激情| 在线一区二区观看| 亚洲国产精品一区二区久久| 欧美色网站导航| 日产国产欧美视频一区精品| 欧美日韩精品一区视频| 老司机一区二区| 亚洲精品一线二线三线无人区| 国内精品免费**视频| 中文字幕中文字幕一区二区| 亚洲一二三级电影| 99国产精品久| 久久99精品国产麻豆婷婷| 久久久久99精品一区| 大白屁股一区二区视频| 亚洲成人一区在线| 亚洲国产精品激情在线观看| 91麻豆精品在线观看| 日日夜夜精品视频天天综合网| 欧美日韩国产系列| 韩国在线一区二区| 亚洲国产一区视频| 中文字幕av一区二区三区| 欧美日韩在线播放一区| 99久久亚洲一区二区三区青草| 国产精品一级在线| 一区二区三区在线高清| 久久久影院官网| 国产精品毛片久久久久久久| 久久精品一区二区三区不卡| 国产精品美女久久久久久久久久久 | 无码av中文一区二区三区桃花岛| 亚洲一区影音先锋| 日本系列欧美系列| 日韩vs国产vs欧美| 国产成人8x视频一区二区| 成人性生交大片免费看中文| 色婷婷久久99综合精品jk白丝| 欧美性色黄大片| 久久久精品影视| 综合久久国产九一剧情麻豆| 午夜久久久久久久久| 国产精品99久久久久| 欧美手机在线视频| 国产午夜亚洲精品不卡| 亚洲一区二区三区不卡国产欧美 | 成人免费视频播放| 欧美一区二区在线视频| 久久伊人蜜桃av一区二区| 亚洲少妇中出一区| 国产91清纯白嫩初高中在线观看| 精品视频在线看| 亚洲第一福利视频在线| 97se亚洲国产综合自在线观| 亚洲精品一区二区三区福利| 一区二区三区四区在线免费观看| 国产一区二区三区黄视频| 欧美色视频在线| 亚洲精品欧美专区| 国模少妇一区二区三区| 日本高清成人免费播放| 久久精品国产亚洲a| 91在线你懂得| 中文字幕一区二区三区色视频 | 国模娜娜一区二区三区| wwww国产精品欧美| 成人午夜电影网站| 亚洲激情图片小说视频| 欧美巨大另类极品videosbest | 久久亚洲综合色一区二区三区| 五月综合激情网| 久久久久97国产精华液好用吗| 国产成人av一区二区三区在线 | 亚洲精品一线二线三线无人区| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品国产区一区| 在线影视一区二区三区| 毛片一区二区三区| 欧美高清在线精品一区| 91精品国产入口| 成熟亚洲日本毛茸茸凸凹| 日韩精品一级中文字幕精品视频免费观看 | 亚洲电影第三页| 亚洲男人的天堂av| 国产精品视频第一区| 日韩亚洲欧美在线| 欧美亚洲丝袜传媒另类| 成人免费高清视频在线观看| 午夜久久福利影院| 亚洲午夜久久久久| 一卡二卡三卡日韩欧美| 欧美国产1区2区| 中文av字幕一区| 国产日韩欧美高清在线| 久久九九久久九九| 亚洲色图欧洲色图| 国产亚洲精品超碰| 久久天堂av综合合色蜜桃网| 欧美一级精品在线| 欧美一区二区三级| 国产三级欧美三级日产三级99| 这里是久久伊人| 欧美一级淫片007| 久久女同精品一区二区| 亚洲国产成人私人影院tom| 亚洲天堂2014| 亚洲国产婷婷综合在线精品|