`detach()` not picking up `withDispatcher` dispatcher ?

Skip to first unread message

Oliver Schrenk

Nov 16, 2016, 9:12:14 AM11/16/16
to spray.io User List

I'm trying to understand how dispatchers and execution context work and then especially how you can deal with blocking calls as an API I'm working with unfortunately uses a blocking MongoDB driver.

My idea was to wrap every call in the routing layer with a `detach()` directive, and use a custom dispatcher.

So I do

    implicit val system = ActorSystem("spray-pressure")
    val serviceCustom = system.actorOf(Props(classOf[RestActor]).withDispatcher("custom-dispatcher"),"rest-api-custom")
    IO(Http) ! Http.Bind(serviceCustom, interface = "", port = 8081)

and then have

  detach() {
      complete {
        logger.info("Inside implicit detach complete")
        "Blocking Db driver" 
  } } 

I thought that this would pickup the custom dispatcher but it does not.

  2016-11-16 15:06:36,642 [default-akka.actor.default-dispatcher-7] [routes.DetachedRoute$$anonfun$2]  INFO - Blocking Db driver

I guess my question is why not? I mean I could set set the dispatcher explicitlyin the `detach()`.  But then what is that dispatcher defined in `withDispatcher` used for?


Full project/code here: 
[spray-pressure/DetachedRoute.scala at custom-dispatcher · oschrenk/spray-pressure · GitHub](https://github.com/oschrenk/spray-pressure/blob/custom-dispatcher/src/main/scala/routes/DetachedRoute.scala)

Reply all
Reply to author
0 new messages