Slide 13
Slide 13 text
アクターシステムによるメッセージパッシング (1/2)
コード例
送信側アクター 受信側アクター
⏰ 時間的分離
object OrderProcessManager {
sealed trait Command
case class SubmitOrder(
items: List[String]
) extends Command
def apply(
stockActor: ActorRef[StockActor.Command]
): Behavior[Command] =
Behaviors.receiveMessage {
case SubmitOrder(items) =>
val orderId = generateOrderId()
//
メッセージ送信(ノンブロッキング)
stockActor ! ReserveStock(orderId, items)
//
即座に次の処理へ
Behaviors.same
}
}
object StockActor {
sealed trait Command
case class ReserveStock(
orderId: String,
items: List[String]
) extends Command
def apply(): Behavior[Command] =
Behaviors.receiveMessage {
case ReserveStock(orderId, items) =>
//
在庫引当処理(非同期)
reserveStock(orderId, items)
Behaviors.same
}
}