ActorでDispatchを使うときHttp.configureは使えなかった

Actorでdispatchを使ってRSSを解析しようとしたら。

dispatchの通常の使い方ではエラーとなったので、残しておく。

dispatchを使う時、dispatch.Http を作成して利用するのですが。

Actor内では、Http.configure を使って dispatch.Http を作ろうとすると上手くいきませんでした。

val executorService = Executors.newFixedThreadPool(10)
val httpClient = Http.configure {
    _.setExecutorService(executorService)
        .setIOThreadMultiplier(1)
        .setAllowPoolingConnection(true)
        .setAllowSslConnectionPool(true)
        .setConnectionTimeoutInMs(3000)
        .setRequestTimeoutInMs(10000)
        .setFollowRedirects(true)
        .setMaximumConnectionsPerHost(30)
}

Http.configure 頼らず、Javaの書き方で対応する。

val executorService = Executors.newFixedThreadPool(10)

val asyncHttpClient = new AsyncHttpClient(
    new AsyncHttpClientConfig.Builder()
        .setExecutorService(executorService)
        .setIOThreadMultiplier(1)
        .setAllowPoolingConnections(true)
        .setAllowPoolingSslConnections(true)
        .setConnectTimeout(3000)
        .setRequestTimeout(10000)
        .setCompressionEnforced(true)
        .setFollowRedirect(true).build)
val httpClient = new Http(asyncHttpClient)

httpClientが作成できれば、こっちのものなのでいつも通りのdispatchを使い方でおk

val req: dispatch.Req = dispatch.url(url)
val r = httpClient(req > (x => x))
val res = r()

Actorのコード全体

class RssActor extends Actor with ActorLogging {

    private val executorService = Executors.newFixedThreadPool(10)

    private val asyncHttpClient = new AsyncHttpClient(
        new AsyncHttpClientConfig.Builder()
            .setExecutorService(executorService)
            .setIOThreadMultiplier(1)
            .setAllowPoolingConnections(true)
            .setAllowPoolingSslConnections(true)
            .setConnectTimeout(3000)
            .setRequestTimeout(10000)
            .setCompressionEnforced(true)
            .setFollowRedirect(true).build)
    private val httpClient = new Http(asyncHttpClient)

    //        private val httpClient = Http.configure {
    //            _.setExecutorService(executorService)
    //                .setIOThreadMultiplier(1)
    //                .setAllowPoolingConnection(true)
    //                .setAllowSslConnectionPool(true)
    //                .setConnectionTimeoutInMs(3000)
    //                .setRequestTimeoutInMs(10000)
    //                .setFollowRedirects(true)
    //                .setMaximumConnectionsPerHost(30)
    //        }

    def receive = {
        case msg: String =>
            log.info("start actor")
            ....
    }

    override def postStop() = {
        log.info("stopped actor")
    }

}