zeebe-client 端代码

1. 创建ZeebeClient

默认的创建方式 :
o.camunda.zeebe.client.ZeebeClient#newClient()

   @Bean
    public ZeebeClient zeebeClient(){
        ZeebeClient zeebeClient = ZeebeClient.newClientBuilder()
                //指定网关地址
                .gatewayAddress(gatewayAddress)
                .defaultJobTimeout(Duration.ofSeconds(10))
                //指定不用鉴权
                .usePlaintext()
                .build();
        return zeebeClient;
    }

此时各项参数采用默认配置,具体配置的数值参见 io.camunda.zeebe.client.impl.ZeebeClientBuilderImpl

在这里插入图片描述

2.与server端的交互机制

client端通过定时任务跟server端通信,默认情况下,定时任务的线程池在创建ZeebeClient时创建
io.camunda.zeebe.client.impl.ZeebeClientImpl#buildExecutorService
在这里插入图片描述

2.1.JobWorker的创建

JobWorker的默认实现为 io.camunda.zeebe.client.impl.worker.JobWorkerImpl#JobWorkerImpl
JobWorkerImpl类在创建时就会启动轮询任务
在这里插入图片描述
在这里插入图片描述
其轮询间隔默认为100ms


defaultJobPollInterval = Duration.ofMillis(100);
(取自  io.camunda.zeebe.client.impl.ZeebeClientBuilderImpl#defaultJobPollInterval)

在这里插入图片描述

2.2限流机制:

在这里插入图片描述
在这里插入图片描述
其中 activationThreshold 取值为 Math.round(maxJobsActive * 0.3f)
0.3倍的最大jobs活跃数(该值默认为32)

jobWorkerMaxJobsActive = 32;
(取自  io.camunda.zeebe.client.impl.ZeebeClientBuilderImpl#jobWorkerMaxJobsActive)

2.3 jobWorker的核心逻辑

JobWorker的核心方法为 io.camunda.zeebe.client.impl.worker.JobWorkerImpl#poll
在这里插入图片描述
任务的拉取动作委托给JobPoller

在这里插入图片描述
该类实现了 gRpc的 StreamObserver 接口,需要实现3个接口,对应上述的handler

在这里插入图片描述
jobHandle对应的方法
io.camunda.zeebe.client.impl.worker.JobWorkerImpl#handleJob
在这里插入图片描述
注意,轮询任务、执行任务是共用的一个线程池

此处的 JobRunnableFactory 是在创建JobWorker时创建
io.camunda.zeebe.client.impl.worker.JobWorkerBuilderImpl#open
在这里插入图片描述
open() 方法中传入的jobHandler即为具体的方法执行逻辑,是需要我们创建各类任务的处理类,即手动接入zeebe-client时,实现 io.camunda.zeebe.client.api.worker.JobHandler,以其为入参创建一个 JobWorkerBuilderImpl 即可,可参考:

@Slf4j
@Component
public class JobHandlerRegister {

    @Autowired(required = false)
    private List<JobHandler> jobHandlerList;
    @Autowired
    private ZeebeClient zeebeClient;

    private Map<String, JobWorker> jobWorkerMap = new HashMap<>();

    @PostConstruct
    public void registerHandler(){
        if(CollectionUtils.isEmpty(jobHandlerList)){
            log.warn("无有效的jobHandler");
            return;
        }
        for(JobHandler jobHandler : jobHandlerList){
            JobWorker jobWorker = zeebeClient.newWorker()
                    .jobType(jobHandler.getJobType())
                    .handler(jobHandler)
                    .open();
            jobWorkerMap.put(jobHandler.getJobType() , jobWorker);
        }
        log.info("jobHandler注册成功");
    }

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值