go語言 grpc入門

2021-09-26 11:15:23 字數 4632 閱讀 3580

go get google.golang.org/grpc
1.編寫.proto描述檔案

hello.proto

syntax = "proto3";

package proto;

message string

service helloservice

2.使用protoc工具生成相應的go**

生成的**與porto描述檔案在同乙個目錄下,包路徑與package對應,檔名為hello.pb.go

3.服務提供者實現定義的rpc方法

package proto

import

("context"

"fmt"

)type helloserviceimpl struct

func

(p *helloserviceimpl)

hello

(ctx context.context, args *string)

(*string,

error

)return reply,

nil}

4.註冊grpc服務

package main

import

("google.golang.org/grpc"

proto "let_me_go/protobuf"

"log"

"net"

)func

main()

// 繫結監聽埠

grpcserver.

serve

(listen)

}

5.服務端呼叫grpc服務

package main

import

("context"

"fmt"

"google.golang.org/grpc"

proto "let_me_go/protobuf"

)func

main()

) fmt.

println

(result.value)

}

傳統的rpc屬於典型的b/s模式,客戶端和服務端不具備雙向通訊的能力。而grpc基於http2構建,對於這種場景提供了良好的支援。

1.修改.proto描述檔案

syntax = "proto3";

package proto;

message string

service helloservice

2.使用protoc工具生成相應的go**

3,服務提供者實現channel方法

package proto

import

("context"

"fmt"

)type helloserviceimpl struct

func

(p *helloserviceimpl)

hello

(ctx context.context, args *string)

(*string,

error

)return reply,

nil}

func

(p *helloserviceimpl)

channel

(stream helloservice_channelserver)

error

else

e := stream.

send

(&string

)if e !=

nil}

}

這裡helloservice_channelserver型別的stream由protoc生成,我們可以使用它輕鬆的傳送和接收資料

helloservice_channelserver

type helloservice_channelserver inte***ce

4.註冊grpc服務

grpc服務的註冊沒有任何區別

package main

import

("google.golang.org/grpc"

proto "let_me_go/protobuf"

"log"

"net"

)func

main()

grpcserver.

serve

(listen)

}

5.客戶端呼叫grpc服務

package main

import

("context"

"fmt"

"google.golang.org/grpc"

"io"

proto "let_me_go/protobuf"

"time"

)func

main()

) time.

sleep

(time.

duration(2

)* time.second)}}

()for}

fmt.

println

(recv.value)

}}

6.呼叫結果

server

誒呀我說呀

誒呀我說呀

誒呀我說呀

誒呀我說呀

client

你說我聽著呢

你說我聽著呢

你說我聽著呢

你說我聽著呢

1.docker包依賴引入

由於發布訂閱模型使用了docker的pubsub包,所以要先引入docker包

go get github.com/docker/docker
2.編寫.proto描述檔案

// 發布訂閱介面

service pubsubservice

使用grpc流接收訂閱資料

3.服務提供者實現publish/subscribe方法

// 將接收的到的訂閱結果傳送到訂閱客戶端

for v :=

range ch )}

return

nil}4.註冊grpc服務

package main

import

("google.golang.org/grpc"

proto "let_me_go/protobuf"

"log"

"net"

)func

main()

grpcserver.

serve

(listen)

}

5.內容發布客戶端呼叫publish方法發布內容

package main

import

("context"

"google.golang.org/grpc"

proto "let_me_go/protobuf"

"time"

)func

main()

) client.

publish

(context.

background()

,&proto.string

)}

6.內容訂閱客戶端呼叫subscribe方法訂閱內容

package main

import

("context"

"fmt"

"google.golang.org/grpc"

proto "let_me_go/protobuf"

)func

main()

)for

}

7.呼叫結果

接收到訂閱訊息:ios是最棒滴

go版本gRPC入門

本文通過乙個簡單的示例,了解如何在go中使用grpc。使用命令列安裝 使用以下命令安裝grpc go get google.golang.org grpc 獲取編譯器外掛程式protoc gen go,並將其安裝在 gobin路徑中,預設為 gopath bin。5 必須設定好 path環境變數,協...

Go語言 gRPC框架使用

上節課已經學習了grpc基本知識,對grpc有了初步的認識。本節課通過程式設計實現grpc程式設計。我們想要實現的是通過grpc框架進行遠端服務呼叫,首先第一步應該是要有服務。利用之前所掌握的內容,grpc框架支援對服務的定義和生成。grpc框架預設使用protocol buffers作為介面定義語...

go語言gRPC系列 二 為gRPC新增證書

3.改造服務端使用自簽證書 4.改造客戶端 單向認證 前情回顧 go語言grpc系列 一 grpc入門 之前我們演示的客戶端和服務端之間是沒有使用證書的,不是很安全。下面演示一下,服務呼叫之間加入自簽的證書驗證。生產環境以網上購買的證書為準 登入如下鏈結 安裝到某個目錄 進入安裝目錄的bin資料夾下...