Actor 系统JAVA编码实现一
Actor模型的基础就是消息传递,一个Actor模型可以认为是一个基本的计算单元,它能接收消息并基于消息执行运算,也可以发送消息给其他Actor模型。各个Actor模型之间相互隔离,不共享内存。
先写一个简单的demo
public abstract class Actor {
private BlockingQueue<Message> mailbox = new LinkedBlockingQueue<>();
private ExecutorService executorService = Executors.newCachedThreadPool();
public void send(Actor actor, Object message) {
actor.mailbox.add(new Message(message));
}
public void start() {
executorService.submit(() -> {
while (true) {
try {
Message message = mailbox.take();
onReceive(message.getContent());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
}
protected abstract void onReceive(Object message);
}
- 消息体
@Data
public class Message implements Serializable {
private String nodeId;
private Object content;
public Message(Object content) {
this.content = content;
}
}
- ActorSystem:ActorSystem是Actor的管理系统,也是外部调用API的主要入口,提供本框架中的主要功能:创建Actor、发送消息、休眠Actor、网络通信等。这里就写个main执行方法。
public class ActorSystem {
public static void main(String[] args) throws InterruptedException {
Actor actor = new Actor() {
@Override
protected void onReceive