horizon是laravel的官方的队列控制面板。
安装时的要点是:
最好在生产服务器上也使用
php artisan horizon:install 这个命令。
原因是他居然在public下会生成文件。而一般的laravel插件不会这么做。
很容易忘记拷贝从本地。
注意:
supervisord的配置文件里,
user配置必须是真实的用户。
修改app/Provides/HorizonServiceProvider.php:
配置要点:
horizon的配置中,
'path' => 'admin/horizon',把这个面板的页面放到admin路径后。
然后在laravel-admin里,设置菜单,角色自己定义,路径horizon
然后为了安全起见,
horizon的配置文件里:
'middleware' => ['web','admin',],
这样的话,只有登录后台,才能看到面板。
继续这个配置文件,下面这个queue是在database.php配置的。
'use' => 'queue',
database.php
'redis' => [
'client' => 'phpredis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
//'read_timeout' => 60,
],
// 这是用于缓存的。
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
// 这是用于队列的。
'queue' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 2,
],
],
每个redis都有16个库,编号应该是从0到15
一定要分开来,不过就算不分的话,他好像是有前缀的,关系也不大,分最好。分的参数是那个database
继续:
下面那个supervisor,并不代表必须要使用supervisord。只要执行
php artisan horizon这个命令,都会生效。
processes这个参数,生成多少个进程。
queue这个参数重要,确定这个配置监听哪些队列。
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['q1','qiye_weixin','email','log1','log2'],
'balance' => 'false',
'processes' => 3,
'tries' => 3,
],
'supervisor-2' => [
'connection' => 'redis',
'queue' => ['default',],
'balance' => 'false',
'processes' => 1,
'tries' => 3,
],
],
'local' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default','q1','qiye_weixin','email','log1','log2'],
'balance' => 'simple',
'processes' => 3,
'tries' => 3,
],
],
],
使用要点:
当使用horizon之后,就不需要再使用
php artisan queue:work 这个命令了。
而是改由
php artisan horizon 这个命令来消费队列。
当然,在生产环境中,肯定也不是直接使用这个命令,而是使用supervisord,反正也超简单的。
/etc/supervisord.d/horizon.ini:
[program:horizon] process_name=%(program_name)s command=php /应用目录/artisan horizon autostart=true autorestart=true user=nginx //需根据实际情况修改 redirect_stderr=true stdout_logfile=/应用目录/storage/logs/horizon.log 根据实际改
妈妈再也不用担心我没有好用的php队列了!