Open3

gRPC導入

Jerome_1010Jerome_1010

golang serverにgRPCを導入していく
protobufの管理やgenにはbufを使う(bufはある程度試し済み)

ついでに初めてZennのスクラップ機能を使うのでそのお試しの意味もある

Jerome_1010Jerome_1010

ローカルのgoモジュールを引っ張ってくる方法

https://go.dev/ref/mod#go-mod-file-replace replaceを使って参照先を変更しておく
今回はgo.modを直接いじった

読み込み先にgo.modがない場合作っておかないとimport時に怒られるので作ったがこれで良かったんだろうか...

Jerome_1010Jerome_1010

grpcurlで動作確認する(localhost編)

grpcurlを使う。手元に入れるよりdockerで動かした方が安定してそうなのでdockerを使う(公式参照)

準備

  1. imageの準備
  2. コードに追記

1. imageの準備

grpcurlのdocker imageがあるのでそれを利用する

# Download image
docker pull fullstorydev/grpcurl:latest
# Run the tool
docker run fullstorydev/grpcurl {url:port} list

コードに追記

grpcurlを使うためにmain.goreflection.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オプションを付けていなかっただけだった(これで半日溶かした)