gRPC導入
golang serverにgRPCを導入していく
protobufの管理やgenにはbufを使う(bufはある程度試し済み)
ついでに初めてZennのスクラップ機能を使うのでそのお試しの意味もある
ローカルのgoモジュールを引っ張ってくる方法
https://go.dev/ref/mod#go-mod-file-replace replace
を使って参照先を変更しておく
今回はgo.mod
を直接いじった
読み込み先にgo.mod
がない場合作っておかないとimport時に怒られるので作ったがこれで良かったんだろうか...
grpcurlで動作確認する(localhost編)
grpcurl
を使う。手元に入れるよりdockerで動かした方が安定してそうなのでdockerを使う(公式参照)
準備
- imageの準備
- コードに追記
1. imageの準備
grpcurl
のdocker imageがあるのでそれを利用する
# Download image
docker pull fullstorydev/grpcurl:latest
# Run the tool
docker run fullstorydev/grpcurl {url:port} list
コードに追記
grpcurl
を使うためにmain.go
にreflection.Register(s)
を追記する。grpcを実装するserverがReflectionをAPIを使えないとエラーになるため(おそらくlistコマンドなどでメソッド一覧を出すのに使っているのだと思う)
reflectionを使わない場合はこちら https://github.com/fullstorydev/grpcurl#proto-source-files
動作確認
docker run fullstorydev/grpcurl -plaintext gateway.docker.internal:50051 list
を叩くと実装しているrpcの一覧が取れる。
dockerからlocalhost
を叩く場合gateway.docker.internal
を指定しないと参照できないので注意
最初Failed to dial target host **** tls: first record does not look like a TLS handshake
というエラーがでてnetwork周りか何かの設定かなと思ったが普通に-plaintext
オプションを付けていなかっただけだった(これで半日溶かした)