概览

BackgroundJob.enqueue(() -> System.out.println("这是在分布式任务中所需的一切!"));

通过仅使用 Java 8 lambda,在Java应用程序中执行fire-and-forget延迟定时循环任务的非常简单的方式。

支持CPU和I/O密集型、长时间运行和短时间运行的任务。持久存储可以通过关系型数据库(如Postgres、MariaDB/MySQL、Oracle、SQL Server、DB2和SQLite)或NoSQL(ElasticSearch、MongoDB和Redis)完成。

JobRunr提供了一种可靠方式处理后台任务并在JVM实例内共享主机、专用主机或云中(你好,Kubernetes)运行它们的统一编程模型。

反馈

感谢构建JobRunr,我很喜欢它!在使用之前,我在Ruby和Golang中使用了类似的库,到目前为止,JobRunr是使用最愉快的一个。我特别喜欢仪表板,它太棒了!Alex Denisov

jobrunr.io 上查看更多反馈。

特点

  • 简单:只需使用Java 8 lambda创建后台作业。
  • 分布式和集群友好:通过使用乐观锁定保证单个调度程序实例执行。
  • 持久性作业:使用关系型数据库(四个表和一个视图)或NoSQL数据存储。
  • 可嵌入:设计用于嵌入现有应用程序中。
  • 依赖最小:(ASM、slf4j和jackson和jackson-datatype-jsr310,gson或符合JSON-B的库)。

使用场景

一些可能适用的场景:

  • 在REST API中立即返回客户端响应并在后台执行长时间运行的任务
  • 大规模通知/新闻通讯
  • 工资计算和生成结果文档
  • 从xml、csv或json进行批量导入
  • 创建归档
  • 触发Web钩子
  • 图片/视频处理
  • 清理临时文件
  • 定期自动报告
  • 数据库维护
  • 在数据更改后更新elasticsearch/solr
  • …等等

您可以从小处着手,在Web应用程序中处理作业,或者横向扩展并添加尽可能多的后台作业服务器以处理峰值作业。JobRunr将为您在所有服务器上分发负载。JobRunr还具有容错性 - 外部Web服务宕机?别担心,作业将自动重试10次,并采用智能回退策略。

JobRunr是 HangFireResqueSidekiqdelayed_jobCelery 的Java替代品,并类似于QuartzSpring Task Scheduler

屏幕截图


m1

m2

m3

m4

m5

m6

使用

Fire-and-forget任务

专用工作池线程尽快执行排队的后台作业,缩短请求的处理时间。

BackgroundJob.enqueue(() -> System.out.println("简单!"));

延迟任务

仅在给定时间段后执行计划的后台作业。

BackgroundJob.schedule(Instant.now().plusHours(5), () -> System.out.println("可靠!"));

循环任务

执行循环任务从未如此简单;只需调用以下方法,使用CRON表达式执行任何类型的循环任务。

Background

Job.scheduleRecurrently("my-recurring-job", Cron.daily(), () -> service.doWork());

在Web应用程序内处理后台任务…

您可以在任何Web应用程序中处理后台任务,我们对Spring提供全面的支持 - JobRunr可靠地在Web应用程序中处理后台作业。

…或者在任何其他地方

比如Spring控制台应用程序,包装在永远运行并轮询新后台作业的Docker容器中。

请参阅 https://www.jobrunr.io 获取更多信息。

参考资料

https://github.com/jobrunr/jobrunr