ben ilk tam DİNLENME proje oluşturma ile çok mücadele edildi. Bulduğum örnekler merhaba dünya seviyesindeydi ... Birkaç blog okudum, birkaç yorum ve örnek proje oluşturmaya karar verdim. Bu skala/akka/sprey/mysql dayanmaktadır
Veri Sen Burada https://github.com/vixxx123/scalasprayslickexample
üzerine bunu kontrol edebilirsiniz vb değiştirildiğini müşterilerine bildirmek için WebSocket'e tam çalışma örneği olduğunu projeden yönlendirme örnek kod :
val personCreateHandler = actorRefFactory.actorOf(RoundRobinPool(2).props(Props[CreateActor]), s"${TableName}CreateRouter")
val personPutHandler = actorRefFactory.actorOf(RoundRobinPool(5).props(Props[UpdateActor]), s"${TableName}PutRouter")
val personGetHandler = actorRefFactory.actorOf(RoundRobinPool(20).props(Props[GetActor]), s"${TableName}GetRouter")
val personDeleteHandler = actorRefFactory.actorOf(RoundRobinPool(2).props(Props[DeleteActor]), s"${TableName}DeleteRouter")
val userRoute =
pathPrefix("person") {
pathEnd {
get {
ctx => personGetHandler ! GetMessage(ctx, None)
} ~
post {
entity(as[Person]) {
entity =>
ctx => personCreateHandler ! CreateMessage(ctx, entity)
}
}
} ~
pathPrefix (IntNumber){
entityId => {
pathEnd {
get {
ctx => personGetHandler ! GetMessage(ctx, Some(entityId))
} ~ put {
entity(as[Person]) { entity =>
ctx => personPutHandler ! PutMessage(ctx, entity.copy(id = Some(entityId)))
}
} ~ delete {
ctx => personDeleteHandler ! DeleteMessage(ctx, entityId)
} ~ patch {
ctx => personPutHandler ! PatchMessage(ctx, entityId)
}
}
}
}
}
ve aktör işleyicisi oluşturmak örnek:
override def receive: Receive = {
case CreateMessage(ctx, person) =>
val localCtx = ctx
connectionPool withSession {
implicit session =>
try {
val resId = PersonsIdReturning += person
val addedPerson = person.copy(id = Some(resId.asInstanceOf[Int]))
localCtx.complete(addedPerson)
publishAll(CreatePublishMessage(TableName, localCtx.request.uri + "/" + addedPerson.id.get, addedPerson))
L.debug(s"Person create success")
} catch {
case e: Exception =>
L.error(s"Ups cannot create person: ${e.getMessage}", e)
localCtx.complete(e)
}
}
}
Orada eksik iki önemli şeyler hala şunlardır: OAuth2 ve notifica itmek web kullanıcısı üzerinden belirli kullanıcı/bağlantı için
Burada örneğinize bakıyordum ve CDI kullandığınızı farkettim. Kullanmayı neden seçtiğin belli bir sebep var mı? – EdMelo
CDI ile bağımlılık enjeksiyonu mı kastediyorsunuz? – Gangstead
Evet./* Stackoverflow daha fazla karakter gerektirir ... */ – EdMelo