откуда неявно предоставляется, когда я вызываю akka.http.scaladsl.Http.apply ()?

Я использую Akka HTTP для поддержки REST, и мне нужно использовать Actors в другой части сервера, который я разрабатываю. Насколько я понимаю, обычно нужно использовать только ОДИН экземпляр ActorSystem во всем приложении. Из определения akka.http.scaladsl.Http.apply () кажется, что когда я использую метод Http, как в фрагменте из моего кода ниже -

val service: FooRestService = new FooRestService()
Http(). bindAndHandle(service.route, "localhost", 8080)   // something is supplying the imply method w/ implicit ActorSystem ! 

--- каким-то образом метод apply () объекта Http получает неявный экземпляр ActorSystem ... Для удобства Http.apply () определяется следующим образом:

package akka.http.scaladsl.Http
        ...
    object Http {
        ...
      def apply()(implicit system: ActorSystem): HttpExt = super.apply(system)

Поскольку мне нужно придерживаться только одного экземпляра ActorSystem, я хочу предоставить другой (не REST) ​​код на основе Actor в моей системе с той же ссылкой, что и тот, который предоставляется методу Http apply ().

Я догадывался, что мой код должен выполнять импорт пакета с объектом пакета с неявной ActorSystem, или должен быть какой-то другой способ, которым это неявное проскальзывает, как ниндзя в глухую ночь. Я немного ковырялся, но не мог понять; ^ (

Любые предложения очень ценятся!


person Chris Bedford    schedule 21.02.2016    source источник


Ответы (2)


Не уверен, что я полностью понял, в чем проблема, но у каждого вашего актера есть context: ActorContext. Вы можете получить ActorSystem от context.system. Таким образом, вам не нужно явно передавать ActorSystem.

person expert    schedule 21.02.2016
comment
Спасибо ! Ваш намек помог мне понять, откуда исходит неявное. Я подробно описал, как я использовал ваше предложение для отладки своей проблемы, в дополнительном ответе ниже. - person Chris Bedford; 22.02.2016

Вот как я использовал ответ @expert (см. Выше) для отладки, откуда исходил мой неявный. Ключевым моментом является выгрузка системной переменной из Актера, который получает неявное ... затем посмотрите на имя, чтобы выяснить, откуда взялось неявное. В моем случае неявное исходило из моего собственного кода (как глупо!). В любом случае .. благодаря ответу выше моя проблема решена.

    val http: HttpExt = Http()
    val sys = http.system
    System.out.println("sys:" + sys);
    http. bindAndHandle(
        service.route, "localhost", injector.getInstance(classOf[Conf]).getInt(PROVISIONER_PORT )
      )
person Chris Bedford    schedule 22.02.2016