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資料夾下...