gRPC
前回までのエントリに引き続きBazelのビルドをまとめていく。 blog.soushi.me blog.soushi.me 今回のエントリではgRPCサーバを含むGoプロジェクトをBazelでビルドする方法をまとめる。 Protocol BufferとgRPCサーバのInterfaceの生成をBazelで行う これまで…
Serverlessプラットフォームが注目される中、その潮流にJava勢も乗っかりたいので起動速度が速いと注目のGraalVMを試してみた。 モチベーション GraalVMのアプリケーション起動までを理解したい。 GraalVMでSpring Fuを動したい。 GraalVMでHTTP/1.1とgRPCの…
gRPCのClientで認証ヘッダーなどリクエストHeaderに値をセットしてgRPC Serverへリクエストするにはどうすればよいか?今回のエントリではgrpc-javaのClientでHeaderをセットしてリクエストする方法をまとめていく。 これまでのエントリではgRPC Serverのほ…
開発中のプロジェクトでTLSが有効なGo製 gRPC ServerにAndorid8.0(Oreo)からは接続ができて、Kotlin製(grpc-java) gRPC Serverには接続ができない状況に直面した。 原因はOpenSSLでTLSを有効にしていたがALPN対応ができていなかった。Android8.0(Oreo)では…
gRPC ServerのレスポンスにはMetadataを含めることができる。gRPCのレスポンス・ステータス(io.grpc.Status.OKやio.grpc.Status.INVALID_ARGUMENT)やDescription(エラーメッセージ)に加え、例えば400系のエラーでも異なるエラー内容をクライアントに伝え…
今回のエントリも前回に続きprotobufの数あるtypeの中から1つの使い方まとめていきたい。今回は google/protobuf/wrappers.protoをまとめていく。 protobufのtypeのなかにはプリミティブなtypeとしてstringやuint32, uint64などが用意されている。プリミテ…
protobufのtypeに日付型をつかいたいケースがあったので com.google.protobuf.Timestampをつかってみた。 google/protobufを覗いてみると公式に載っているtypeの他にも使えそうなものがあるので定義に迷ったときは一読をおすすめする。 github.com ここから…
前回のエントリでは認証処理やメトリクス計測、ログ出力などをインターセプターをつかい横断的に処理する方法をまとめた。 naruto-io.hatenablog.com 今回のエントリではgRPC Serverのトランザクション内で発生した例外処理を横断的にキャッチしてレスポンス…
前回のエントリに続いて今回のエントリではgRPC Clientのテストの書き方をまとめていく。 naruto-io.hatenablog.com テスト対象のproto テスト対象のprotoは次のとおりSimple-RPCとする。 service TaskService { rpc GetTaskService (TaskInbound) returns (…
grpc-javaで実装されたgRPC ClientとgRPC Serverのテストコードについてまとめていきたい。 ClientとServerのどちらも大枠は同じである。テストコードのなかでgRPC Serverを起動させる。そしてリクエスト内のトランザクションを必要に応じてモック化しながら…
Kotlin1.1からの新機能であるコルーチン(Coroutines)を試していきたい。Kotlin コルーチンをつかえば非同期処理を同期的なコードで書けるし、非同期処理をブロッキングすることもシンプルなコードで書ける。 今回はgRPC Serverへのリクエスト部分をコルーチ…
アスペクト指向プログラミング(AOP)をgRPC Serverではどう扱うか考えていきたい。 横断的な関心事といえば認証やログ出力である。 gRPCクライアントのメタデータに認証トークンを添えてリクエストを行いgRPC Serverのinterceptorで横断的に認証を完了させ…
今回のエントリはKotlin + gRPC(FWはSpringBoot 2.0.0.M1)のアプリケーションでgRPCのリクエストタイムやエラー回数などのメトリクスを計測する方法をまとめていく。 dropwizard/metrics メトリクス計測のライブラリには dropwizard/metricsをつかってみた…
gRPCのプロトコル定義ファイル(.proto)の管理を考えていきたい。gRPCを導入するプロジェクトであれば.protoファイルの運用方法は課題である。 プロトコル定義ファイル(.proto)の運用課題 gRPCはプロトコル定義ファイル(.proto)から生成したプログラム…
Spring Boot 2.0.0 M1がリリースされました。以前のエントリで試した当時は 2.0.0.BUILD-SNAPSHOTでありHTTPサーバーが起動している状態でgRPCクライアントを動かすとエラーになっていた。 2.0.0 M1のリリースに伴いHTTPサーバーとgRPCサーバーが1つのjarに…
grpc-java/SECURITY.mdを読み進めるとTLSを有効にしたgRPCサーバの起動には2つのプロトコルプロバイダーを選択できる。 JDKとOpenSSLがその2つである。それぞれを有効にする方法は異なりドキュメントも豊富ではない。この機会にまとめていきたいというのが…
前回のエントリではgrpc/grpc-javaをベースにkotlinでgRPCを試しました。今回はSSL/TLSを有効にする方法をまとめていきます。grpc/grpc-java/SECURITY.mdを参照しながら進めました。 証明書を準備する 手元に適当な証明書がなかったのでgrpc-go/testdataにあ…
KotlinでgRPCを試していきます。protocol buffersがkotlinに対応していないのでjavaに生成したものを使います。次のようなアプリケーション構成でKotlinを使ったgRPC通信を試してみました。 アプリケーション構成 エンドクライアントからのアクセスはGateway…
今回はgRPCをマイクロサービス間通信に導入することってメリットあるよね、というエントリです。 定期的に処理を実行してくれるバッチはよくあるものですがバッチの駆動をgRPCを使って次のような構成で動かしました。 Batch ControlとBatch ServerはBidirect…