要求 :
在我的项目(在分布式环境中运行)中,我们需要在固定时间安排作业,初始延迟为 1 分钟,如果作业执行失败,它将重试,并且最多可以重试 10 次,每次延迟 2 分钟。
我们可以实现相同目标的工具:
我可以用spring-retry
实现同样需要的功能。但是,有多个容器可用(分布式环境)。Rabbit-MQ
、Amazon-sqs
Redis-quartz
等工具都支持此功能。但我不确定哪一个更适合弹簧靴。
需要考虑的因素:
以下是选择正确工具时需要考虑的内容:
分布式环境
一致性
容
错 易于配置
异步处理
问题
基本上,我正在寻找类似于Java(springBoot)中的Resqueue和sidekiq ruby实现的东西。有没有人在他们的应用程序中实现了相同的功能?如果是这样,提供利弊的更好选择/方式是什么。欢迎提出建议。
您可以使用 Spring 的RetryTemplate
,这很容易配置。
您可以在您的案例中使用带有FixedBackOffPolicy
的SimpleRetryPolicy
。 可以根据您的要求(在本例中为 2 分钟)使用SimpleRetryPolicy
中存在的backOffPeriod
属性配置最大重试次数。
这种重试机制很容易插入到 Spring 引导项目中。
分布式任务的替代方案包括
- 用于 JVM 的 Raft 库
- CP模式中使用的Hazelcast(使用Raft)
- K8S(使用etcd)
- 春云领事
- 数据库调度程序
- 阿卡有一个单例