やったこと
gRPC に入門します。
公式のチュートリアルとは少しだけ手順を変えてやっていきます。言語はRuby
です。
確認環境
$ docker --version
Docker version 19.03.13, build 4484c46d9d
調査
gRPC とは
Googleが開発を開始したオープンソースのリモートプロシージャコール (RPC) システムである。
さらにデフォルトで、Protocol Buffersを使うことが出来ます。
Protocol Buffers とは
Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler
シリアライズしてあるデータで、速い(とのこと)。
Quick start を進める
tab1 (server)
-- local
$ docker run -it --rm grpc/ruby bash
-- コンテナ
$ gem install grpc
$ gem install grpc-tools
$ git clone -b v1.34.0 https://github.com/grpc/grpc
$ cd /grpc/examples/ruby
$ ruby greeter_server.rb
tab2 (client)
※ コンテナIDを $ docker ps
を実行するなどして取得してください
-- local
$ docker exec -it de1f4f419893 bash
-- コンテナ
$ cd /grpc/examples/ruby
-- 編集用
$ apt-get update
$ apt-get install vim
今回は、tab2 (client) の中で色々作業していきます。
examples/protos/helloworld.proto
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
// 今回追加する
rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
gRPCのコードを生成
$ grpc_tools_ruby_protoc -I ../protos --ruby_out=lib --grpc_out=lib ../protos/helloworld.proto
このファイルが更新されました。
modified: lib/helloworld_pb.rb
modified: lib/helloworld_services_pb.rb
greeter_server.rb
class GreeterServer < Helloworld::Greeter::Service
...(省略)
def say_hello_again(hello_req, _unused_call)
Helloworld::HelloReply.new(message: "Hello again, #{hello_req.name}")
end
end
greeter_client.rb
def main
stub = Helloworld::Greeter::Stub.new('localhost:50051', :this_channel_is_insecure)
user = ARGV.size > 0 ? ARGV[0] : 'world'
message = stub.say_hello(Helloworld::HelloRequest.new(name: user)).message
p "Greeting: #{message}"
# ここが追加するコード
message = stub.say_hello_again(Helloworld::HelloRequest.new(name: user)).message
p "Greeting: #{message}"
end
実行します
$ ruby greeter_client.rb
最後に
新しい言葉が多く出てきましたが、手を動かすことで開発の流れを少しだけイメージすることができました。
gRPC は数種類の通信方法があるみたいなので、やっていきたいと思います。