wizory / llock
Laravel 共享锁定插件
Requires
- php: >= 7.2
- barryvdh/laravel-ide-helper: ~2
- laravel/framework: >= 5.1
Requires (Dev)
- ext-pcntl: *
- fzaninotto/faker: ~1.4
- illuminate/database: 5.1.* || 6.*
- laravel/laravel: 5.1.* || 6.*
- mockery/mockery: 0.9.* || ^1.0
- phpspec/phpspec: ~2.1 || ~5.1
- phpunit/phpunit: ~4.8 || 8.*
This package is auto-updated.
Last update: 2024-09-04 22:18:28 UTC
README
[在此处插入骆驼图片]
此插件添加了一套 artisan 命令,用于设置和释放共享命名锁。当前主要用例是与 Laravel forge 一起使用多个负载均衡服务器。
通过此插件提供的锁定功能包括:
串行部署 Web 实例
使用 --wait
模式允许每个 Web 实例根据谁拥有锁的顺序进行部署。随着每个部署的完成,锁将释放,以便下一个可以获取它。这确保了始终至少有一个实例在运行并提供服务。
所有实例上相同的计划任务(无重复运行)
可以在所有 Web 实例上配置计划任务的运行,但只有获得锁的那个实例会执行任务。这允许更容错的设计,因为任何 Web 实例都可以丢失,而计划任务(计划任务)将继续运行(但如果有多个实例“运行”,则不会重复运行)。
设置/安装
此插件旨在与现有的 Laravel 5.1 LTS(长期支持)站点/应用程序一起使用。添加插件的步骤如下。
将 GitHub 仓库添加到 composer.json
这允许 composer 直接从 GitHub 获取软件包依赖项。一旦插件正式“发布”,此步骤将变得不必要。
更新您的 composer.json
文件,添加一个新的 repositories
元素(通常放置在 require
块之前)
"repositories": [ { "type": "vcs", "url": "git@github.com:wizory/llock.git" } ],
将插件依赖项添加到 composer.json
现在将插件依赖项添加到现有的 require
块
"require": { ..., "wizory/llock": "dev-master" },
在 require
部分指定的 wizory/llock
版本引用了存储库的 master
分支。
发布后,示例将更新为指向发布版本。
更新 composer
现在运行 composer update
以获取 llock 及其依赖项。
注册 llock 服务提供者
将以下行添加到 config/app.php
中的 providers 数组
Wizory\Llock\LlockServiceProvider::class,
运行安装程序
此命令将安装插件正常运行所需的示例配置和迁移(迁移)
php artisan llock:install
新添加的文件应提交到您的项目。
注意: 此命令将运行迁移。如果您有任何待处理的迁移,请在运行安装之前解决它们。
用法
此时,您应该能够运行 php artisan llock:status
并获得一些输出。您也可以通过传递 -h
到任何命令来获取用法详细信息。
php artisan llock:status
显示任何当前锁的状态。
php artisan llock:set <name>
设置名为 <name>
的锁。传递 --wait
将等待可配置的时间以获取已存在同名锁的命名锁。插件将定期尝试获取锁(也可配置)。
此命令的返回代码为 0(true)表示获取了锁,否则为 1(false)。返回代码为 2(也代表 false)表示错误(例如数据库连接)。
php artisan llock:free <name>
释放名为 <name>
的锁。
无论是否释放了锁,此命令的返回码都是 0,出错时为 2。
示例
确保跨多个站点实例的顺序部署
将类似以下内容添加到您的部署脚本/代码中
LOCKNAME=mysite php artisan llock:set --wait ${LOCKNAME} # command will not return until a lock is obtained or the timeout is reached # deploy steps here.... php artisan llock:free ${LOCKNAME}
此示例主要假设“顺利的情况”。您可能需要检测返回码,在超时或其他错误发生前失败(在部署前)。
确保计划任务在多个站点实例中只运行一次
为您的 CRON/调度器条目使用类似以下内容
php artisan llock:set mysite && php artisan schedule:run; php artisan llock:free mysite # or the mostly equivalent if php artisan llock:set mysite; then php artisan run; fi; php artisan llock:free mysite
同样,此示例没有明确处理可能出现的各种错误情况。这个(方便的)单行命令可能会变得复杂,因此您可能希望从您的调度器中调用一个中间脚本。
更新
要更新到 llock 的新版本,请按照以下步骤操作
composer update wizory/llock
php artisan llock:install
之后提交任何新更改的文件。
安全性
这里假设了信任,因为任何“客户端”都可以释放任何其他客户端创建的锁。这在不受信任的环境中不是一种有用的锁定实现。
以下内容为草案
以下文档等内容都是工作进行中(WIP),将根据具体情况修订、组织,并移至上方部分。
运行测试
- 设置以上内容后,登录到您的 vagrant 机器,切换到站点目录并运行
vendor/bin/phpunit
如果您想获得彩色输出,请使用 --colors
标志。
您应该会看到大量的测试运行并通过。 :)
路线图
随着 Laravel 更新 LTS 标识到新版本,如果引入任何破坏性更改,此插件将更新以与之兼容。
贡献
待办事项:
提供有关开发设置和贡献的进一步说明。
注意:对于在 llock 包本身上进行的本地开发,请使用以下内容(根据需要更改相对路径到 llock 包)
"repositories": [ { "type": "path", "url": "../llock" } ], "require": { ..., "wizory/llock": "*@dev" },