Skip to content

Armeria x Spring x Kotlin x gRPC

okue/grpc-samples-in-kotlin

Armeria, Spring Boot を使って, gRPC サーバーを Kotlin で実装する例.

Logging

Armeria の大きな魅力は logging や tracing が簡単にできること.

特に Logback 用に提供されている RequestContextExportingAppender は強力で, logback.xml をこんな感じに含めるだけで, リクエストに関する情報が MDC に含まれてくれる.

Error handling

エラーハンドリングは, io.grpc.ServerInterceptor を使ってやっている.

この feature https://github.com/line/armeria/issues/3307 が実装されたら, io.grpc.ServerInterceptor を書かずにもっとわかりやすい実装ができそうだ.

Kotlin coroutine

Armeria のリクエストコンテキストはスレッドローカルに保存されている.

コルーチンを Armeria の提供しない Executor, Dispatchers.IO 等にディスパッチする場合は, リクエストコンテキストをしっかり伝搬させる必要がある.

そのため kotlinx.coroutines.ThreadContextElement を実装した ArmeriaRequestContext.kt を使うようにしている.

また, grpc-kotlin を使う場合, Armeria は useBlockingTaskExecutor オプションの有無によってディスパッチされるスレッドが異なる.


Posted: 2021-01-30
Last update: 2021-03-02