zeebe的任务队列

1.背景

zeebe的代码都是异步化处理的,整个项目中都是个中任务的封装,并提交到线程池中处理,任务队列在其中是很重要的一部分,zeebe也有不同维度的多个任务队列,在此梳理下。

2.broker的任务队列(WorkStealingGroup任务队列)

2.1 自定义的线程池

ActorThreadActorThreadGroupActorExecutor 本质上是自己实现了一套线程池,按照自定义线程池的思路,ActorThread 中存在着循环执行:

io.camunda.zeebe.scheduler.ActorThread#run
在这里插入图片描述
io.camunda.zeebe.scheduler.ActorThread#doWork
在这里插入图片描述

2.2 WorkStealingGroup任务队列:

WorkStealingGroup 中维护着每个线程的任务队列(一个线程一个队列

io.camunda.zeebe.scheduler.WorkStealingGroup

在这里插入图片描述

ActorThread#doWork 中通过 WorkStealingGroup#getNextTask 一直在消费其中的任务,其任务的新增则是通过WorkStealingGroup#submit方法

往队列中插入任务:
ActorScheduler对象继承 ActorSchedulingService接口,该接口提供的submit方法都是提交actor对象
在这里插入图片描述
而这些方法的实现最终还是向actorTaskExecutoractorTaskExecutor 提交 ActorTask
在这里插入图片描述
而该方法就是ActorExecutor的submit方法的底层方法:
io.camunda.zeebe.scheduler.ActorExecutor#submitTask
——> io.camunda.zeebe.scheduler.ActorThreadGroup#submit
——> io.camunda.zeebe.scheduler.WorkStealingGroup#submit

3.ActorTask中的任务队列

io.camunda.zeebe.scheduler.ActorTask 中有一个任务队列 Deque<ActorJob> fastLaneJobs

在gateway处理请求转发的过程中,很多处理动作都是由 actor.run() 方法异步执行 ( ActorControl#run

例如:io.camunda.zeebe.gateway.impl.broker.BrokerRequestManager#sendRequestInternal(io.camunda.zeebe.gateway.impl.broker.request.BrokerRequest, io.camunda.zeebe.gateway.impl.broker.BrokerRequestManager.TransportRequestSender, java.time.Duration)
在这里插入图片描述

该方法调用的是 ActorControl#scheduleRunnable
在这里插入图片描述

每个runnable任务都提交到 ActorTask 的实例中,这里的 insertJob() 和 submit() 都是操作队列 Deque<ActorJob> fastLaneJobs
在这里插入图片描述

ActorTask中会循环poll队列中的任务执行

io.camunda.zeebe.scheduler.ActorTask#execute
在这里插入图片描述

最终任务的执行是提交线程池 ActorExecutor 中,其调用链路为:
io.camunda.zeebe.scheduler.ActorScheduler#start
io.camunda.zeebe.scheduler.ActorThread#run

4.ActorThread中的任务队列

ActorThread 对象中有一个有界队列,默认长度2048
io.camunda.zeebe.scheduler.ActorThread#jobs
在这里插入图片描述

其中方法 io.camunda.zeebe.scheduler.ActorThread#recycleJob 往队列中添加任务:
在这里插入图片描述

该方法的调用是在 io.camunda.zeebe.scheduler.ActorTask#execute
若job不是正常终止,则 回收到ActorThread的job队列中
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值