项目做了负载均衡,统一部署的时候,在多台服务器之间如何确保定时任务的唯一性?

如题,队列是用redis弹出或锁定数据库某行数据
单机的定时任务不重复执行是通过当前项目下文件的互斥锁来实现的,如果是多机的情况下,需要自己去实现上一句的功能?请问有没有更方便快捷的办法?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
1年前 评论
Siam (楼主) 1年前
讨论数量: 14

xxljob

1年前 评论
Siam (楼主) 1年前

唯一任务锁, 或者以下方法,这也是我一直在用的

\Illuminate\Support\Facades\Redis::funnel('你的key')->block(0)->then(function () {
    // 这里是你的业务逻辑 匿名函数运行结束会自动解锁

    return 'You have been throttled';
});

该方法会自动创建 redis 锁,并在 then 的第一个匿名函数执行结束后释放锁,block(0) 代表如果获取不到锁阻塞当前进程的时间,超时后执行 then 的第二个匿名函数,你也可以指定 limit(2), 代表最多能有两个进程获得锁

1年前 评论

队列《Laravel 9 中文文档》

laravel 有唯一性队列, 需要启用 redis 或其他公用缓存才可以实现。

具体如何实现可以查询 那里调用了 use Illuminate\Contracts\Queue\ShouldBeUnique,她是怎么判断的

1年前 评论

k8s 或者 分布式锁吧

1年前 评论
  • 配置文件判断
  • 分布式锁(数据库唯一索引、redis分布式锁、zookeeper分布式锁)
  • 将定时任务拆出来单节点执行
  • xxljob-exe-laravel
1年前 评论

队列 定时最好单独一台服务器做这个事情 负载均衡只负责无状态的一些工作

1年前 评论
黑将军 1年前
Siam (楼主) 1年前
1年前 评论
Siam (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!