Actor 系统JAVA编码实现二

Java Actor系统编码实现及优化

前面实现了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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芳心村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值