我正在使用Redisson分布式执行器服务。任务类A被设计用来处理由队列ID标识的给定队列。有多个这样的队列。我需要确保在集群中的任何时候,在同一队列上工作的任务类A的实例不超过一个。
Task class A instance1 working on queue1
Task class A instance2 working on queue2
不允许:
Task class A instance1 working on queue1
Task class A instance2 working on queue1
有大量这样的队列,并且它们是动态变化的。因此,任务实例的预分配不是一个选项。
在Quartz分布式调度器的世界中,对应的是所谓的独占作业,由@DisallowConcurrentExecution实现。在Akka框架的世界中,默认情况下,角色模型会自动实现另一件类似的事情。
如何使用Redisson executor实现这一点?如果不是直接的,这可以通过一些分布式锁(这在Redisson中很方便)来实现吗?
发布于 2021-04-29 16:28:37
我正在寻找类似的东西,并最终编写了自己的分布式任务逻辑,它在引擎盖下使用Redis缓存进行协调。redis缓存有一个分布式锁(我们选择的任何键)以及一个下一次执行时间字段。这不是最漂亮的东西,但它起作用了。
我不相信任何东西都存在于盒子之外。
https://stackoverflow.com/questions/63267465
复制