grpc-gateway同時提供HTTP和gRPC服務

grpc使用

1. 安裝

go install \
    github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
    github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
    google.golang.org/protobuf/cmd/protoc-gen-go \
    google.golang.org/grpc/cmd/protoc-gen-go-grpc

protocbuf

image.png
syntax = "proto3";

package protoc;

import "google/api/annotations.proto";


option go_package ="pb/";
message ProductRequest {
  int32 prodId = 1;
}

message ProductResponse {
  int32  prod_stock=1;
}

message HelloHTTPRequest {
  string name = 1;
}

// HelloResponse 響應結(jié)構(gòu)
message HelloHTTPResponse {
  string message = 1;
}

// 定義服務主體
service ProdService{
  // 定義方法
  rpc GetProductStock(ProductRequest) returns(ProductResponse) {
    // http option
    option (google.api.http) = {
      post: "/v1/prod/prod_id"
      body: "*"
    };
  };

  // 定義SayHello方法
  rpc SayHello(HelloHTTPRequest) returns (HelloHTTPResponse) {
    // http option
    option (google.api.http) = {
      post: "/example/echo"
      body: "*"
    };
  }
}

生成文件

// pro.pb.go
protoc --go_out=plugins=grpc:./ pro.proto

// pro.pb.gw.go
protoc -I . --grpc-gateway_out ./pb \
--grpc-gateway_opt logtostderr=true \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt generate_unbound_methods=true \
pro.proto

代碼

  • grpc 服務器
func main() {
    var  Address = "127.0.0.1:50052"
    listen, err := net.Listen("tcp", Address)
    if err != nil {
        grpclog.Fatalf("failed to listen: %v", err)
    }

    // 實例化grpc Server
    s := grpc.NewServer()

    // 注冊HelloService
    pb.RegisterProdServiceServer(s, &service.ProdService{})

    grpclog.Println("Listen on " + Address)
    s.Serve(listen)
}
  • http 服務器

func main() {
    // 1. 定義一個context
    ctx := context.Background()
    ctx, cancel := context.WithCancel(ctx)
    defer cancel()

    // grpc服務地址
    endpoint := "127.0.0.1:50052"
    mux := runtime.NewServeMux()
    opts := []grpc.DialOption{grpc.WithInsecure()}

    // HTTP轉(zhuǎn)grpc
    err := pb.RegisterProdServiceHandlerFromEndpoint(ctx, mux, endpoint, opts)
    if err != nil {
        grpclog.Fatalf("Register handler err:%v\n", err)
    }

    grpclog.Println("HTTP Listen on 8080")
    http.ListenAndServe(":8080", mux)
}

資料

https://github.com/grpc-ecosystem/grpc-gateway
https://www.cnblogs.com/baoshu/p/13510854.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枣接,一起剝皮案震驚了整個濱河市佛点,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顷蟀,老刑警劉巖悍汛,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件选脊,死亡現(xiàn)場離奇詭異帽撑,居然都是意外死亡现诀,警方通過查閱死者的電腦和手機夷磕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仔沿,“玉大人坐桩,你說我怎么就攤上這事》怙保” “怎么了绵跷?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長成福。 經(jīng)常有香客問我碾局,道長,這世上最難降的妖魔是什么奴艾? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任净当,我火速辦了婚禮,結(jié)果婚禮上握侧,老公的妹妹穿的比我還像新娘蚯瞧。我一直安慰自己嘿期,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布埋合。 她就那樣靜靜地躺著备徐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甚颂。 梳的紋絲不亂的頭發(fā)上蜜猾,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音振诬,去河邊找鬼蹭睡。 笑死,一個胖子當著我的面吹牛赶么,可吹牛的內(nèi)容都是我干的肩豁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辫呻,長吁一口氣:“原來是場噩夢啊……” “哼清钥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起放闺,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤祟昭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后怖侦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篡悟,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岸售。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踩萎,靈堂內(nèi)的尸體忽然破棺而出停局,到底是詐尸還是另有隱情很钓,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布董栽,位于F島的核電站码倦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锭碳。R本人自食惡果不足惜袁稽,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擒抛。 院中可真熱鬧推汽,春花似錦补疑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暖夭,卻和暖如春锹杈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迈着。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工竭望, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裕菠。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓咬清,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奴潘。 傳聞我的和親對象是個殘疾皇子枫振,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容