概览
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是 HangFire、Resque、Sidekiq、delayed_job、Celery 的Java替代品,并类似于Quartz和Spring Task Scheduler。
屏幕截图
使用
专用工作池线程尽快执行排队的后台作业,缩短请求的处理时间。
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