저는 스칼라로 작성된 웹 응용 프로그램을 Play! 프레임 워크와 Akka. 이 코드는 기본적으로 다음과 같이 구성되어 있습니다. Play 컨트롤러는 Akka 배우에게 메시지를 보냅니다. 액터는 데이터베이스 액세스를 추상화하는 지속성 레이어와 대화합니다. 응용 프로그램에서 이러한 구성 요소의 사용의 전형적인 예 :CRUD 웹 응용 프로그램에서 Akka 액터 사용하기
class OrderController(orderActor: ActorRef) extends Controller {
def showOrders(customerId: Long) = {
implicit request => Async {
val futureOrders = orderActor ? FindOrdersByCustomerId(id)
// Handle the result, showing the orders list to the user or showing an error message.
}
}
}
object OrderActor extends Actor {
def receive = {
case FindOrdersByCustomerId(id) =>
sender ! OrderRepository.findByCustomerId(id)
case InsertOrder(order) =>
sender ! OrderRepository.insert(order)
//Trigger some notification, like sending an email. Maybe calling another actor.
}
}
object OrderRepository {
def findByCustomerId(id: Long): Try[List[Order]] = ???
def insert(order: Order): Try[Long] = ???
}
당신이 볼 수 있듯이, 이것은 많은 다른 언어와 프레임 워크에서 볼 것입니다 무슨 같이 기본 CRUD 패턴입니다. 쿼리는 아래의 레이어로 전달되고 응용 프로그램이 데이터베이스에서 결과를 얻으면 해당 결과는 UI에 도달 할 때까지 다시 나타납니다. 유일한 차이점은 액터의 사용과 비동기 호출입니다.
저는 배우의 개념에 새로운 것이므로 아직 배우지 못합니다. 그러나, 내가 읽은 바에 따르면, 배우가 사용되기로되어있는 것은 아닙니다. 하지만 주문을 삽입 할 때 이메일을 보내는 것과 같은 경우에는 진정한 비동기 메시지 전달이 필요합니다.
제 궁금한 점은 이런 방식으로 액터를 사용하는 것이 좋습니까? Fala와 Akka의 다른 동시성 기능을 활용하여 Scala에서 CRUD 응용 프로그램을 작성하는 대안은 무엇입니까?
입력 한 채널을 살펴보십시오. 게시 한 후에 나온 것입니다. 메시지 흐름에 흥미로운 기능이있어 여러 액터를 통해 메시지를 전달하는 등의 작업을 할 수 있습니다. OrderRepository.insert (order) -! -> sender -? -> sendEmail -? -> displayResult. –