概要
前回の
gRPCにおける各RPC方式の実装方法【Simple RPC】 - Carpe Diem
に引き続き、今回はServer streaming RPCの実装方法を紹介します。
サーバ側から複数のレスポンスを送ることができるので、フィードなどをReactiveに取得したい時に使ったり、サーバサイドプッシュを使いたい時などで有用です。
環境
- golang 1.9.2
- grpc 1.7.2
- protobuf 3.4.0
成果物
最終的に出来たコードはこちら
続きを読む前回の
gRPCにおける各RPC方式の実装方法【Simple RPC】 - Carpe Diem
に引き続き、今回はServer streaming RPCの実装方法を紹介します。
サーバ側から複数のレスポンスを送ることができるので、フィードなどをReactiveに取得したい時に使ったり、サーバサイドプッシュを使いたい時などで有用です。
最終的に出来たコードはこちら
続きを読むgRPCは4つのRPC方式を持っています。
RPC方式 | 説明 | 使い所 |
---|---|---|
Unary(Simple) RPC | シンプルな1 Request - 1 Response方式 | 一般的なマイクロサービスなど |
Server streaming RPC | 1 Request - N Response方式 | サーバサイドプッシュ・フィードなど |
Client streaming RPC | N Request - 1 Response方式 | データアップロードなど |
Bidirectional streaming RPC | 1つのTPCコネクションの中で、RequestとResponseの送受信を任意数繰り返す。 WebSocketに近い? |
チャットなど双方向の同期が欲しい時。 コネクション数を節約したい時 |
ref: grpc / gRPC Concepts
それぞれ実装が異なるので、各方式での書き方を簡単に紹介します。
今回はSimple RPCのやり方です。
gRPCなどで使われているprotobufですが、.proto
の定義は簡単でもコンパイルにちょっと学習コストがかかります。
gogoproto
やgrpc-gateway
といった他のライブラリも使うと、中々にカオスなコマンドになります。
protoc -I/usr/local/include -I. \ -I$GOPATH/src \ -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --grpc-gateway_out=logtostderr=true:. \ path/to/your_service.proto
ref: https://github.com/grpc-ecosystem/grpc-gateway
この辺の手間を解決してくれるのが次のツールです。
面倒なコマンドをオプションで簡単に使えるようにしてくれます。
続きを読むFluentdを0.12から0.14へアップデートしました。
その時にtd-agent.confやらpluginで色々と変更点があったのでその時の対応をまとめます。
以前はbuffer毎に
<match pattern> buffer_type file buffer_path /var/fluentd/buffer/ ... </match>
といった感じに1つ1つpathを設定する必要がありましたが、
<system> root_dir /path/fluentd/root </system>
と設定すれば、システム内の/path/fluentd/root/worker0/plugin_id
に保存されるようになります。