标签: laravel-horizon

Laravel Homestead 中没有主管运行

我最近在 Laravel 项目上安装了 Horizo​​n,该项目在 Homestead Vagrant 机器上运行。

我的问题是队列工作人员没有接到任何工作。我没有主管:

vagrant@homestead:~/Code/project$ artisan horizon:list
+----------------+------+-------------+---------+
| Name           | PID  | Supervisors | Status  |
+----------------+------+-------------+---------+
| homestead-D2dV | 7094 | None        | running |
+----------------+------+-------------+---------+

vagrant@homestead:~/Code/project$ artisan horizon:supervisors
No supervisors are running.
Run Code Online (Sandbox Code Playgroud)

这是我的主管 (horizo​​n.conf) 配置:

[program:horizon]
process_name=%(program_name)s
command=/usr/bin/php /home/vagrant/Code/project/artisan horizon
autostart=true
autorestart=true
user=vagrant
redirect_stderr=true
stdout_logfile=/home/vagrant/Code/project/storage/logs/horizon.log
Run Code Online (Sandbox Code Playgroud)

当我启动这台机器时,我的日志和 Web 界面显示“ Horizo​​n 已成功启动。 ”。

还有我的地平线(horizo​​n.php)配置:

'environments' => [
    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default', 'queue-1', 'queue-2', 'queue-3'],
            'balance' => 'auto', …
Run Code Online (Sandbox Code Playgroud)

laravel homestead laravel-horizon

5
推荐指数
1
解决办法
2380
查看次数

Laravel Horizo​​n 不执行挂起的作业 - Kubernetes 和 Docker 环境

我们的 Laravel 应用程序在 Kubernetes 中有两个不同的 Pod,

  • 一个在端口 80 上运行的 apache,(CMD /usr/sbin/apache2ctl -D FOREGROUND)
  • 和另一个正在运行的工人(Laravel Horizo​​n)(CMD php /var/www/artisan horizo​​n)

问题是当我检查地平线仪表板时,它显示“活动”,我可以在“待处理作业”部分看到作业,但它们从未真正执行过。他们只是坐在那里闲着。

现在,当我在运行 apache 的 pod 中使用 SSH 并手动运行命令“php artisan horizo​​n”时,它实际上会执行所有挂起的作业。

我已经确保了以下几点:

  1. 两个 Pod 都连接到同一个 Redis 数据库服务
  2. 两个 Pod 的 Horizo​​n Prefix 相同

php laravel docker kubernetes laravel-horizon

5
推荐指数
3
解决办法
3353
查看次数

Laravel 队列 - 如何设置 FAST 处理器

我正在使用 Laravel 5.5 并且我正在尝试设置一些快速队列处理。我遇到了一个又一个的障碍。

该网站是雇主/雇员匹配服务。因此,当雇主发布工作职位时,它需要遍历我们系统中的所有员工并计算一些变量,以确定他们与工作的匹配程度。我们已经弄清楚了这一切,但是当系统中有数千名员工时,一次处理一个需要很长时间。所以,我准备写几个表。第一个是定义位置 ID 和状态的简单表。第二个表列出了所有员工 ID、职位 ID 和正在处理的员工的状态。这只需几秒钟即可写入,然后允许用户在应用程序中继续前进。

然后我有另一个服务器设置,每分钟运行一个 cron,检查第一个表中的新条目。找到后,它会将其标记为已开始,然后抓取所有员工并遍历每个员工并在 Laravel 中启动排队作业。我定义的作业确实正确提交到队列,而运行queue:work实际上确实正确处理了作业。这都是经过测试的。

但是,我遇到的问题是,我已经为队列尝试了数据库 (MySQL)、Redis 和 SQS,但它们都非常慢。我正在使用同一台服务器来尝试操作queue:work(使用 Supervisor 并尝试运行多达 300 个进程),但随后创建了 3 个不运行 cron 而仅运行 Supervisor(每个克隆 100 个进程)的克隆,并在第一个服务器。使用数据库它可以正常处理,尽管运行 10k 排队作业需要几个小时,但是使用 SQS 和 Redis 我遇到了很多失败。脚本花费的时间太长或什么的。我检查了运行 worker 的克隆上的 CPU,它们几乎没有达到 40%,所以我不会对服务器过度征税。

我只是在阅读有关地平线的信息,我不确定它是否对这种情况有所帮助。我一直在寻找有关如何使用 Laravel 正确设置队列处理系统的信息,并且一直遇到的问题多于答案。

有没有人熟悉这些东西并且对如何正确设置它有任何建议,以便它非常快速且无故障(假设我的代码没有错误)?

更新:根据其他一些帖子建议,我想我会分享更多细节:

  1. 我正在使用 Forge 作为具有 2G RAM 的 AWS EC2 服务器的设置工具。
  2. 三个克隆中的每一个都具有以下工作器配置:

    command=php /home/forge/default/artisan queue:work sqs --sleep=10 --daemon --quiet --timeout=30 --tries=3  
    
    process_name=%(program_name)s_%(process_num)02d  
    autostart=true  
    autorestart=true  
    stopasgroup=true  
    killasgroup=true  
    user=forge  
    numprocs=100  
    stdout_logfile=/home/forge/.forge/worker-149257.log
    
    Run Code Online (Sandbox Code Playgroud)
  3. 数据库位于 Amazon RDS 上。

我很好奇 …

php queue laravel laravel-5.5 laravel-horizon

4
推荐指数
1
解决办法
4024
查看次数

如何重试 Laravel Horizo​​n 中 Redis 队列中的所有失败作业

如何重试Laravel Horizo​​n 中所有失败的作业?似乎没有“全部重试”按钮,并且 artisan 命令不起作用,因为失败的作业未存储在表中。

php laravel laravel-5 laravel-horizon laravel-5.8

4
推荐指数
1
解决办法
1万
查看次数

如何在MAMP Pro中启用pcntl扩展?

我在OSX MAMP Pro中使用laravel / horizo​​n

当我运行作曲家要求 laravel/horizon:~1.0

它说 -

laravel / horizo​​n v1.0.8需要ext-pcntl *->您的系统中缺少所请求的PHP扩展pcntl。

我检查/Applications/MAMP/bin/php7.1.1/php/ext文件夹,它没有pcntl扩展名。

我该如何安装?

mamp laravel-horizon

3
推荐指数
1
解决办法
1976
查看次数

Laravel 5.5 - Horizo​​n 不会自动运行第二个队列

在 Forge 和 Redis 上使用 Laravel Horizo​​n,我有一个default队列和一个notifications队列。

通知作业都在最近的作业下建立了暂停状态,并且不会得到处理。这是使用的代码:

$event->owner->notify((new ItemWasLiked($event))->onQueue('notifications'));
Run Code Online (Sandbox Code Playgroud)

我发现处理它们的唯一方法是手动显式运行以下命令以notifications进行处理:

php artisan queue:work --queue=notifications
Run Code Online (Sandbox Code Playgroud)

当它进来时,这不应该是自动的吗?我错过了什么?

php laravel laravel-5 laravel-horizon

3
推荐指数
1
解决办法
1700
查看次数

Laravel - 作业报告失败(即使它正确退出)

我正在使用最新版本的 Homestead。我也设置了 Laravel Horizo​​n。我使用 Redis 作为队列驱动程序。Laravel 是 5.6 版,是全新安装的。

发生的事情是我的工作都失败了(即使工作正确退出)。

我使用自定义命令通过命令行运行作业:

vagrant@homestead:~/myapp$ artisan crawl:start
vagrant@homestead:~/myapp$ <-- No CLI errors after running
Run Code Online (Sandbox Code Playgroud)

应用程序/控制台/命令/crawl.php

<?php

namespace MyApp\Console\Commands;

use Illuminate\Console\Command;
use MyApp\Jobs\Crawl;

class crawl extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'crawl:start';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Start long running job.';

    /**
     * Create a new command instance.
     *
     * …
Run Code Online (Sandbox Code Playgroud)

php queue laravel laravel-horizon

3
推荐指数
1
解决办法
3536
查看次数

Laravel Horizo​​n如何使用标签

我在作业队列中的跟踪标签未显示我期望的标签。更改为类后,作业不会处理。

我的工作示例班是:

class EmailUser implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * The user instance.
     *
     * @var \App\User
     */
    public $user;

    /**
     * Create a new job instance.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function __construct(User  $user)
    {
        $this->user = $user;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to('fesher@example.com')->send(new ApplicationReceivedEmail());
    }

   /**
     * Get the tags that should be assigned to the job.
     *
     * …
Run Code Online (Sandbox Code Playgroud)

php tags email laravel laravel-horizon

2
推荐指数
1
解决办法
431
查看次数

Laravel - 按顺序运行作业

我正在学习 Laravel,正在从事一个运行 Horizo​​n 以了解工作的项目。我被困在一个地方,我需要一次又一次地运行相同的工作。

这是我目前正在做的

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Subscriptions;
class MailController extends Controller
{


    public function sendEmail() {
        Subscriptions::all()
        ->each(function($subscription) {
            SendMailJob::dispatch($subscription);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,除了它在多个工作人员之间运行作业并且没有保证的顺序。有没有办法一个接一个地运行作业?

redis laravel laravel-5 laravel-queue laravel-horizon

2
推荐指数
1
解决办法
9141
查看次数

Laravel 安装在子文件夹和地平线中不起作用

我已将 Laravel 安装在子文件夹中,并正在尝试安装 Horizo​​n。路由到“test.com/sub-folder/horizo​​n”后,所有损坏的设计以及内部链接都指向主域而不是主域无子文件夹。

经过搜索,这似乎是已知问题,github问题中已经报告了

当 Laravel 安装在子文件夹中时,是否有任何解决方法可以使 Horizo​​n 工作?

laravel laravel-horizon

2
推荐指数
1
解决办法
1441
查看次数

Laravel Horizo​​n 不处理作业

我在 laravel 5.7 项目上安装 laravel Horizo​​n 并按如下方式配置:

    'domain' => null,
    'path' => 'horizon',
    'use' => 'default',
    'prefix' => env('HORIZON_PREFIX', 'horizon:'),
    'waits' => [
        'redis:default' => 60,
    ],
    'trim' => [
        'recent' => 60,
        'completed' => 60,
        'recent_failed' => 10080,
        'failed' => 10080,
        'monitored' => 10080,
    ],
   'fast_termination' => false,
   'memory_limit' => 64,
   'environments' => [
    'production'=>[
        'save_report' => [
                'connection' => 'redis',
                'queue' => ['save_report'],
                'balance' => 'auto',
                'processes' => 5,
                'tries' => 1,
            ],
    ],
        'local' => [
            'save_report' …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-queue laravel-jobs laravel-horizon

2
推荐指数
1
解决办法
4734
查看次数

Laravel Horizo​​n不处理队列

由于我已将Laravel应用程序从5.4升级到5.5,并添加了Laravel Horizo​​n,因此我的队列不再起作用。这是起作用的旧情况:

我使用的驱动程序是Beanstalkd和Supervisord,用于监视任务并使其正常运行。我使用以下命令运行它:

php artisan queue:work --tries=1 --queue=high,medium,low
Run Code Online (Sandbox Code Playgroud)

新情况:我已将队列驱动程序更新为Redis。当我查看mydomain.com/horizo​​n时,我看到有任务正在执行但尚未处理。从终端运行以下命令也不起作用:

php artisan queue:work --tries=1 --queue=high,medium,low
Run Code Online (Sandbox Code Playgroud)

我有2个队列已填充,Redis队列和Beanstalkd队列。如何完成Beanstalkd队列,然后处理Horizo​​n队列?

php laravel laravel-horizon

0
推荐指数
1
解决办法
1669
查看次数