[java] Akka 액터의 상호작용과 상태 전이
Akka는 자바 및 Scala를 위한 고성능 액터 모델 라이브러리입니다. 액터 모델은 동시성과 병렬성 문제를 다루기 위한 언어 수준의 패턴입니다. Akka 액터는 동시에 실행할 수 있는 고립된 단위로서 작업을 수행하고 다른 액터와 메시지를 통해 상호작용합니다.
이 글에서는 Akka 액터의 상호작용과 상태 전이에 대해 살펴보겠습니다.
액터간 메시지 전송
Akka 액터는 메시지를 통해 상호작용합니다. 액터는 다른 액터로 메시지를 보낼 수 있으며, 보낸 액터는 메시지를 받은 액터에 대한 참조를 유지합니다. 이러한 메시지 전송은 비동기적으로 이루어지며, 보낸 액터는 메시지의 처리 결과를 필요에 따라 확인할 수 있습니다.
public class SenderActor extends AbstractActor {
private final ActorRef receiverActor;
public SenderActor(ActorRef receiverActor) {
this.receiverActor = receiverActor;
}
@Override
public Receive createReceive() {
return receiveBuilder()
.match(String.class, message -> {
// 메시지를 받은 액터에게 메시지를 전송
receiverActor.tell(message, getSelf());
})
.build();
}
}
public class ReceiverActor extends AbstractActor {
@Override
public Receive createReceive() {
return receiveBuilder()
.match(String.class, message -> {
// 메시지 처리
System.out.println("Received message: " + message);
})
.build();
}
}
public class Main {
public static void main(String[] args) {
ActorSystem system = ActorSystem.create("my-system");
ActorRef receiver = system.actorOf(Props.create(ReceiverActor.class));
ActorRef sender = system.actorOf(Props.create(SenderActor.class, receiver));
sender.tell("Hello, Akka!", ActorRef.noSender());
}
}
액터의 상태 전이
Akka 액터는 내부 상태를 가질 수 있습니다. 상태는 액터의 동작에 영향을 미치는 변수 또는 객체입니다. 액터는 메시지에 따라 상태를 변경할 수 있으며, 다른 상태에서 다른 동작을 수행할 수 있습니다.
public class MyActor extends AbstractActor {
private int count = 0;
@Override
public Receive createReceive() {
return receiveBuilder()
.match(Integer.class, message -> {
count += message;
if (count > 10) {
getContext().become(highCountState());
}
})
.build();
}
private Receive highCountState() {
return receiveBuilder()
.match(Integer.class, message -> {
System.out.println("High count state: " + message);
})
.build();
}
}
public class Main {
public static void main(String[] args) {
ActorSystem system = ActorSystem.create("my-system");
ActorRef actor = system.actorOf(Props.create(MyActor.class));
actor.tell(5, ActorRef.noSender()); // count = 5
actor.tell(10, ActorRef.noSender()); // count = 15, 상태 변경
actor.tell(3, ActorRef.noSender()); // 상태 변경된 상태에서 메시지 처리
}
}
Akka 액터는 내부 상태를 유지하고, 메시지에 따라 상태를 전이할 수 있는 강력한 도구입니다. 액터는 동시성 및 병렬성 문제를 다루기 위한 간편한 방법을 제공하며, 대규모 애플리케이션에서 성능을 향상시킬 수 있습니다.