Armeria x Spring x Kotlin x gRPC
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
Last update: 2021-03-02