Akka Typed Actors и AKka Http - не удается найти ActorRefFactory - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь работать с типизированными актерами версии 2.6.3 и akka http версии 10.1.11, в то время как у не типизированных актеров все работает нормально, теперь я получаю ошибку компиляции

object Main extends App {

   def createServer(implicit system: ActorSystem[IdentityCalculated]) = {

implicit val materializer = ActorMaterializer()

 }
 def apply(): Behavior[IdentityCalculated] = {
Behaviors.setup { context =>

  val identityManager = context.spawn(IdentityManager(), "identity-manager")

  implicit val timeout = Timeout(10, TimeUnit.SECONDS)
  implicit val scheduler = context.system.scheduler

  identityManager.tell(CalculateIdentity(context.self))

  Behaviors.receiveMessage{
    case IdentityCalculated(_,_,_) =>
      println("got response")
      Behaviors.same
  }
}

}
ActorSystem(Main(), "credentials-manager")

}

чего мне не хватает ? Я хочу создать http-сервер, когда получаю сообщение о том, что идентификатор вычислен, как только я получаю ошибку компиляции при создании материализатора

Main. scala: 19: 50: требуется неявный ActorRefFactory: если вне Actor вам нужна неявная ActorSystem, то внутри Actor это должен быть неявный ActorContext [error] неявный val materializer = ActorMaterializer () [error] ^ [error] одна найденная ошибка

спасибо

Ответы [ 3 ]

0 голосов
/ 17 февраля 2020

Вы можете использовать классовые c потоки (которые набраны, несмотря на то, что они работают на нетипизированном ActorSystem), заменив:

implicit val materializer = ActorMaterializer()

на

implicit val materializer = system.classicSystem
0 голосов
/ 19 февраля 2020

В Akka 2.6 API-интерфейс ActorMaterializer устарел, и был представлен новый общесистемный материализатор, который всегда доступен. Для запуска потока вам нужен только неявный ActorSystem[T] в области видимости.

akka-stream-typed требуется только в том случае, если вы хотите использовать указанные c потоковые операторы для взаимодействия с типизированными актерами Akka (ActorSource, ActorFlow и ActorSink)

Однако HTTP-интерфейсы Akka все еще зависят от API-интерфейсов classi c, поэтому вам может потребоваться адаптировать их, например, для возможности привязки конечной точки HTTP.

Если это ваша проблема, вы можете увидеть, как это сделать. что в кратком руководстве по Akka HTTP здесь: https://developer.lightbend.com/guides/akka-http-quickstart-scala/http-server.html

0 голосов
/ 16 февраля 2020

Я должен был использовать akka-stream-typed, а не akka-stream

...