Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

Airframe RPCでRxRouterにコンストラクタ引数を渡すにはbindを使う

先日Airframe RPCで遊んだ。

blog.3qe.us

が、Routerをインスタンス化するときにコンストラクタ引数を渡せないという問題があった。

import wvlet.airframe.http.netty.Netty
import wvlet.airframe.http._

object Server extends App {
  // Create a Router
  val router = RxRouter.of[FooBarService] // 引数を渡せない

// Starting a new RPC server.
  Netty.server
    .withRouter(router)
    .withPort(8080)
    .start { server =>
      server.awaitTermination()
    }
}

ここでは、いったんdesignメソッドを呼び、bind[型].toInstance()を使うことでどうインスタンス化するかを制御できることがわかった。そしてstartのかわりにbuild[NettyServer]すればよい。

import wvlet.airframe.http.netty.Netty
import wvlet.airframe.http._

object Server extends App {
  // Create a Router
  val router = RxRouter.of[FooBarService]

// Starting a new RPC server.
  Netty.server
    .withRouter(router)
    .withPort(8080)
    .design
    .bind[FooBarService]
    .toInstance {
      FooBarService(para1, para2, para3)
    }
    .build[NettyServer] { server =>
      server.awaitTermination()
    }
}
★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?