前面实现了Actor 系统JAVA编码实现一。任然不够完善。可以先看这篇文章,进一步了解actor 模型
Actor 系统JAVA编码实现二 :封装 Actor 模型,和 queue 消息队列结合,这个组合基本可以满足太多数场景使用。
- 比如mqtt集群发送,业务消息队列等。
- 流程,1通过controller 发送批量消息 生产者。
- 消息可以通过选项使用 kafka 还是内存队列。通过消费端得到消息。
- 消费端得到消息后,开始使用Actor业务:MyOrderActor和MyPersonActor 处理消息。(当然也可以加入规则引擎,这里不涉及)
- 注意ActorSystem的封装。
- 本代码使用的是springboot3 ,文章最后面有git 地址。
ActorMailbox 优化
- 将原来 mailBox LinkedBlockingQueue 改成 ConcurrentLinkedQueue 。LinkedBlockingQueue 多用于任务队列(单线程发布任务,任务满了就停止等待阻塞,当任务被完成消费少了又开始负载 发布任务)
- ConcurrentLinkedQueue 多用于消息队列(多个线程发送消息,先随便发来,不计并发的-cas特点) 单生产者,单消费者 用
- LinkedBlockingqueue 多生产者,单消费者 用 LinkedBlockingqueue 单生产者 ,多消费者 用
- ConcurrentLinkedQueue 多生产者 ,多消费者 或者多生产者 ,多消费者。
- 同时将 initActor 初始化,增加 Mailbox free和busy状态。
bizActor改造
看下面代码,只需要一个extends 和super.initMail, doProcess 处理消息。
public class MyOrderActor extends ContextAwareActor {
public MyOrderActor(ActorSystemServiceContext systemContext) {
super(systemContext);
}
@Override
public void initMail(ActorCtx ctx) {
try {
super.initMail(ctx);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 处理业务
*/
@Override
protected boolean doProcess(Object message) {
if (message instanceof Message) {
System.out.println("MyOrderActor message: " + message
Java Actor系统编码实现及优化


最低0.47元/天 解锁文章
3925

被折叠的 条评论
为什么被折叠?



