- Notifications
You must be signed in to change notification settings - Fork31
Mutex for Laravel Console Commands.
License
dmitry-ivanov/laravel-console-mutex
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Prevents overlapping for Laravel console commands.
| Laravel | Console Mutex |
|---|---|
| 5.1.* | 5.1.* |
| 5.2.* | 5.2.* |
| 5.3.* | 5.3.* |
| 5.4.* | 5.4.* |
| 5.5.* | 5.5.* |
Install package through
composer:composer require"illuminated/console-mutex:5.1.*"Use
Illuminated\Console\WithoutOverlappingtrait:useIlluminated\Console\WithoutOverlapping;class ExampleCommandextends Command{use WithoutOverlapping;// ...}
Overlapping can be prevented by various strategies:
file(default)mysqlredismemcached
Defaultfile strategy is fine for a small applications, which are deployed on a single server.If your application is more complex and, for example, is deployed on a several nodes, then you probably would like to use some other mutex strategy.
You can change mutex strategy by specifying$mutexStrategy field:
class ExampleCommandextends Command{use WithoutOverlapping;protected$mutexStrategy ='mysql';// ...}
Or by usingsetMutexStrategy method:
class ExampleCommandextends Command{use WithoutOverlapping;publicfunction__construct() {parent::__construct();$this->setMutexStrategy('mysql'); }// ...}
By default mutex is checking for a running command, and if it finds such, it just exits. However, you can manually settimeout for a mutex, so it can wait for another command to finish it's execution, instead of just quitting immediately.
You can change mutex timeout by specifying$mutexTimeout field:
class ExampleCommandextends Command{use WithoutOverlapping;protected$mutexTimeout =3000;// milliseconds// ...}
Or by usingsetMutexTimeout method:
class ExampleCommandextends Command{use WithoutOverlapping;publicfunction__construct() {parent::__construct();$this->setMutexTimeout(3000);// milliseconds }// ...}
There are three possible options for$mutexTimeout field:
0- check without waiting (default);{milliseconds}- check, and wait for a maximum of milliseconds specified;null- wait, till running command finish it's execution;
Sometimes it is useful to set common mutex for a several commands. You can easily achieve this by setting them the same mutex name.By default, mutex name is generated based on a command's name and arguments. To change this, just overridegetMutexName method in your command:
class ExampleCommandextends Command{use WithoutOverlapping;publicfunctiongetMutexName() {return"icmutex-for-command1-and-command2"; }// ...}
Note, thatWithoutOverlapping trait is overridinginitialize method:
trait WithoutOverlapping{protectedfunctioninitialize(InputInterface$input,OutputInterface$output) {$this->initializeMutex(); }// ...}
If your command is overridinginitialize method too, then you should callinitializeMutex method by yourself:
class ExampleCommandextends Command{use WithoutOverlapping;protectedfunctioninitialize(InputInterface$input,OutputInterface$output) {$this->initializeMutex();$this->foo =$this->argument('foo');$this->bar =$this->argument('bar');$this->baz =$this->argument('baz'); }// ...}
If you're using some other coolilluminated/console-% packages, well, then you can find yourself getting "traits conflict".For example, if you're trying to buildloggable command, which is protected against overlapping:
class ExampleCommandextends Command{use Loggable;use WithoutOverlapping;// ...}
You'll get fatal error, the "traits conflict", because both of these traits are overridinginitialize method:
If two traits insert a method with the same name, a fatal error is produced, if the conflict is not explicitly resolved.
But don't worry, solution is very simple. Overrideinitialize method by yourself, and initialize traits in required order:
class ExampleCommandextends Command{use Loggable;use WithoutOverlapping;protectedfunctioninitialize(InputInterface$input,OutputInterface$output) {$this->initializeMutex();$this->initializeLogging(); }// ...}
The MIT License. Please seeLicense File for more information.
About
Mutex for Laravel Console Commands.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors5
Uh oh!
There was an error while loading.Please reload this page.


