3.snail-job广播任务

本节目标

  • 客户端java代码模拟收集日志信息,概率出现失败。
  • 验证每个客户端节点均被调用。
  • 验证所有客户端均成功,该广播任务才算成功。

客户端代码

 

scala

代码解读

复制代码

@Slf4j @Component public class TestBroadcastJob extends AbstractJobExecutor { ​    @Value("${snail-job.port}")    private int clientPort; ​    @Override    protected ExecuteResult doJobExecute(JobArgs jobArgs) {        int randomInt = RandomUtil.randomInt(100);        log.info("随机数: {}", randomInt);        SnailJobLog.REMOTE.info("随机数: {},客户端端口:{}", randomInt, clientPort);        if(randomInt<50) {            throw new RuntimeException("随机数小于50,收集日志任务执行失败");       }        // 获得jobArgs 中传入的相加的两个数        return ExecuteResult.success("随机数大于50,收集日志任务执行成功");   } }

本机两个客户端启动

上面的客户端代码,由于要在本机运行两次。所以需要指定客户端的端口,用于区分不同的客户端。

web端口snail-job的客户端端口
80891789
80901790

1.web端口设置

这里增加JVM的运行参数:-Dserver.port=8089。这个JVM参数是通过如下操作而出现:

2.snail-job的客户端端口配置

修改application.yml的snail-job.port端口。8089对应的是1789,8090对应的1790

3.在线机器中查看

可以看到两个客户端已经正常启动了。

服务端配置广播任务

配置项配置内容
任务名称测试广播任务
组名称service_plat
状态禁用
任务类型广播
执行器类型java
执行器名称com.mayuanfei.test.TestBroadcastJob
路由策略轮询
阻塞策略丢弃
最大重试次数0

说明:

  • 任务类型:广播

    所有客户端节点均执行同一个任务

  • 路由策略:轮询

    这里的轮询表示,客户端会一个接一个的执行任务

  • 最大重试次数:0

    为了验证所有客户端均成功,该广播任务才算成功。所以这次避免错误重试机制

  • 状态:禁用

    使用手动方式,执行广播任务

进行测试

1.手动执行广播任务

依次点击定时任务列表中,测试广播任务后的执行->确认按钮,手动触发广播任务。

2.客户端输出

  • 8089端口客户端

     

    less

    代码解读

    复制代码

    2024-10-04 23:06:28 [snail-netty-server-3] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[2330] 任务调度成功. 2024-10-04 23:06:28 [snail-job-job-2,330-1] INFO com.mayuanfei.test.TestBroadcastJob - 随机数: 68 2024-10-04 23:06:28 [snail-job-job-2,330-1] INFO com.mayuanfei.test.TestBroadcastJob - 随机数: 68,客户端端口:1789 2024-10-04 23:06:28 [snail-job-job-2,330-1] INFO c.a.s.c.j.c.e.JobExecutorFutureCallback - 任务执行成功 taskBatchId:[2330] [{"status":1,"result":"随机数大于50,收集日志任务执行成功","message":"任务执行成功"}] 2024-10-04 23:06:38 [nioEventLoopGroup-2-4] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[847]
  • 8090端口客户端

     

    less

    代码解读

    复制代码

    2024-10-04 23:06:28 [snail-netty-server-3] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[2330] 任务调度成功. 2024-10-04 23:06:28 [snail-job-job-2,330-1] INFO com.mayuanfei.test.TestBroadcastJob - 随机数: 12 2024-10-04 23:06:28 [snail-job-job-2,330-1] INFO com.mayuanfei.test.TestBroadcastJob - 随机数: 12,客户端端口:1790 2024-10-04 23:06:28 [snail-job-job-2,330-1] ERROR c.a.s.c.j.c.e.JobExecutorFutureCallback - 任务执行失败 taskBatchId:[2330] java.lang.RuntimeException: 随机数小于50,收集日志任务执行失败 at com.mayuanfei.test.TestBroadcastJob.doJobExecute(TestBroadcastJob.java:31) at com.aizuda.snailjob.client.job.core.executor.AbstractJobExecutor.lambda$jobExecute$0(AbstractJobExecutor.java:81) at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131) at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:75) at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) 2024-10-04 23:06:39 [nioEventLoopGroup-2-4] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[846] ​

3.执行批次日志

  • 任务状态是处理失败

  • 日志中的详细信息

  • 查看日志信息

    • id为967

    • id为968

4.最终执行成功

多次手动执行广播任务,如果不是特别点背。很快就能看到如下的界面:

5.测试总结

  • 的确是每个客户端都执行了同一个任务批次
  • 的确是所有客户端全部成功,最终这个批次的任务才算执行处理成功

总结

  • 广播任务类型适合在同一时间,所有客户端均执行同一个任务的场景。
  • 每个客户端节点均执行同一个批次任务
  • 所有客户端均成功该批次任务才算处理成功;有任何一个失败,该批次任务处理失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值