问题标签 [laravel-horizon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
58 浏览

php - Laravel Mailable 使用正确的模型,然后使用不正确的模型发送第二个不需要的电子邮件

我有一种情况,我正在建立一个 FTP 连接来收集数据,循环通过它注册新的或使用firstOrCreate. 这是每 10 分钟在调度程序上运行一次,我使用 Laravel Horizo​​n 来管理队列。

问题是,当我运行调度程序时,我发送了一份包含正确数据的查询和一份包含错误数据的查询(只有一封电子邮件)。

如果数据不正确但远非理想,我发现了一个使用急切加载和失败的小解决方法。

从下图中可以看出,创建了两个使用不同 ID 的作业。220 正确,29 错误。

当我记录正在循环的内容时,它只显示一项(220)。

我也无法使用命令重新创建错误,因此似乎(尽管未确认)仅在调度程序中发生。

有谁知道为什么会这样?

在此处输入图像描述

0 投票
2 回答
93 浏览

javascript - Vue 对象未使用 axios POST 请求进行更新

并且通知对象在 html 模板中也没有任何内容。

注意:相同的代码在我只有这个 vue 实例的所有页面上都可以正常工作。在另一个页面(localhost/horizo​​n)上(使用 laravel horizo​​n 包并更新它的 layout.blade.php),其中有两个 vue 实例,一个用于通知,另一个用于 Laravel/Horizo​​n,此请求不返回任何内容。

0 投票
2 回答
221 浏览

laravel - 使用 Laravel Horizo​​n 进行动态配置

我正在尝试更改邮件驱动程序username,并且password如下所示。

动态配置设置在队列作业中。对于队列处理,我使用的是 Laravel Horizo​​n。但是,当我执行队列作业时。它仍然使用默认配置。不是我动态设置的配置。

注意:当我在配置设置后立即登录时,它显示的是动态值。

如何动态设置配置并使 Laravel Horizo​​n 使用动态配置?

0 投票
1 回答
1354 浏览

laravel - Laravel Horizo​​n:同一服务器上的多个实例相互干扰

我有 3 个 Laravel 应用程序都在需要用于 Horizo​​n 的同一台服务器上运行。

我遇到了一个问题,即无法运行冲突和作业的应用程序。

使用 Medis 检查 Redis 数据库后,我可以看到每个作业都有 3 个条目:

  • PRODUCTION_horizo​​n:2
  • STAGING_horizo​​n:2
  • HRS_horizo​​n:2

其中production和是我的应用程序名称,并且staging是作业的 ID。hrs2

如果作业是从中分派的,staging它可能仍被productionor拾取hrs,然后只是等待暂存,从未实际运行。

经过大量搜索后,我找到了解决此问题的方法,方法是在我的所有队列前面加上应用程序名称。

所以我的配置从此改变:

对此:

这实际上使它起作用了!所以基本上我已经修复了它。

但这感觉真的不对。

现在,当我将作业分派到特定队列时,我必须做MyJob::dispatch()->onQueue(config('app.name') . '_emails');

这显然是不理想的。

我觉得必须有更好的方法,但文档中没有解释如何做到这一点。

有没有办法阻止地平线相互干扰?也许我应该使用多个 Redis 数据库之类的?

我意识到发布一个我已经找到解决方案的问题可能看起来很奇怪,但我想在盲目询问之前尝试自己修复它,虽然我找到了解决方案,但我真的很恼火,可能有很多更简单的解决方案我只是不知道。最坏的情况,如果没有更好的解决方案,其他有同样问题的人会找到这个并发现我的解决方案。

0 投票
1 回答
1184 浏览

php - Laravel 队列有时会重复一个作业

我正在使用 Laravel 5.7 制作网站爬虫。队列在 Redis 驱动程序上,我正在使用 laravel Horizo​​n 来运行该作业。我只想同时运行或排队一个作业,但是它有时会复制一个作业并最终同时运行同一作业的多个实例。有什么方法可以保证一次只运行一个作业?

职位类别

{ 使用 Dispatchable、InteractsWithQueue、Queueable、SerializesModels;

}

如果作业失败,我想再次将该作业排队,除非它被手动停止。如果作业达到限制,我还想将作业放回队列。

队列.php

返回 [

];

0 投票
0 回答
593 浏览

laravel - Laravel Horizo​​n 一半的工作都失败了

我在我的服务器上设置了 laravel Horizo​​n,我发现一半的作业都失败了,并出现以下错误:

不知道为什么会发生这种情况,但队列在我的本地环境中运行良好。有没有人遇到过这些问题

代码如下

调用调度方法

调用工作类

调用通知类

0 投票
1 回答
471 浏览

php - 超时作业挂起 15 或 30 分钟,然后运行

  • 地平线版本:3.7.2 / 3.4.7
  • Laravel 版本:6.17.0
  • PHP版本:7.4.4
  • Redis 驱动和版本:predis 1.1.1 / phpredis 5.2.1
  • 数据库驱动程序和版本:-

我们的 Horizo​​n 出现了奇怪的错误。基本上这就是发生的事情: - 一个作业排队。并开始处理。

  • 90 秒后(我们的超时配置值)它超时。

  • 120 秒(我们的retry_after值)后重试作业。

  • 重试作业成功。

  • 15 分钟或 30 分钟后,原始作业(超时)完成。随着运行实际工作。

似乎这可能发生在任何类型的工作中。例如,如果它是排队的可邮寄邮件,则用户首先收到一封电子邮件,然后在 15 或 30 分钟后用户收到另一封电子邮件。一样的。

这是我们的配置文件

config/database.php

config/queue.php

config/horizon.php

这是它在 Horizo​​n 仪表板中的外观

当初始作业超时时。Recent Jobs在重试工作时, 它会保持这种状态。地平线1

差不多半个小时后变成这样:

地平线2

标签是一样的,我只是把名字涂黑了。

这是我们看到的日志(这里的时间是 UTC)

[2020-04-22 11:24:59][88] Processing: App\Mail\ReservationInformation

[2020-04-22 11:29:00][88] Failed: App\Mail\ReservationInformation

[2020-04-22 11:29:00][88] Processing: App\Mail\ReservationInformation

[2020-04-22 11:56:21][88] Processed: App\Mail\ReservationInformation

注意:使用 Predis 我们还可以看到一些类似的日志,Error while reading line from the server. [tcp://REDIS_HOST:6379]但使用 PHPRedis 则没有。

我们尝试了很多不同的组合,以消除问题。它发生在每一个组合中。所以我们认为这一定与 Horizo​​n 有关系。

我们尝试了: - Predis 与 Redis 5 和 Redis 3

  • read_write_timeout具有不同值的 Predis

  • PHPRedis 与 Redis 5 和 Redis 3

  • THP 在一台服务器上启用。因此,我们还尝试了与禁用 THP 的服务器的所有组合。

  • 我们在 Laravel 6.11 和 Horizo​​n 3.4.7 然后升级到 Laravel 6.14 和 Horizo​​n 3.7.2

只有一个 Horizo​​n 实例正在运行。此 Horizo​​n 实例中不处理任何其他队列。

欢迎任何信息或提示尝试!

0 投票
1 回答
128 浏览

laravel-nova - Nova Queued Actions 触发多个作业

我已经创建了一个动作:

然后,我为 1128 个项目(两次)触发它并观察结果:

默认情况下,批次按 200 个项目分组,据我所见,同时产生了 3 个作业。不幸的是,没有办法知道哪个作业将首先被处理,因此每个批次更改的模型都会显示在日志中,如输出所示:621525, 412186, 621282当第一次调用动作和621282, 621525, 412186第二次调用动作时(模型在作业之间拆分同样的方式,但处理的作业顺序发生了变化)。这里的问题是,如果我将视图保存到 CSV 文件,则顺序很重要。

我希望在给定的时间为给定的行动只产生一份工作,这将解决我的问题。这可能吗?

使用 Horizo​​n 作为队列工作者

0 投票
1 回答
2059 浏览

laravel - 从 Laravel Horizo​​n 中获取日志,在主管的 docker 中运行

在 Supervisor 的帮助下,我使用Laravel Horizo​​n来处理我的 Laravel 应用程序中的作业。整个设置在 ECS 中的 docker 上运行。在 ECS 的主机节点(由 Fargate 管理)上,我运行了 datadog 代理,它将获取容器的 stdout/stderr 并将其放入 datadog 中(这样我就可以集中访问日志)。

我注意到的是,我没有从正在处理的作业中获取任何日志。即使是简单print("test");的工作代码也不会进入标准输出。

这是我的设置:

Dockerfile

yaml 中这个的服务定义如下所示:

这是我的内容horizon.conf

知道我可能会错过什么吗?我无法通过主管从 docker 中的 Horizo​​n 处理的作业中获取日志?

0 投票
0 回答
115 浏览

laravel - Laravel Pusher 仅在使用 Supervisor 启动 Horizo​​n 时才会失败

很难为此提供正确的信息。已经好几天了。我让 Pusher 在 Vagrant 中运行良好。我使用基本的 Horizo​​n 配置(产品/本地无关紧要)来支持它:

所有这一切都在Laravel 的 Stancl Tenancy 背后。一切正常。我已经在生产箱上安装了完全相同的系统。这也很好。

我现在已经在一个使负载平衡器和 SSL 复杂化的业务中安装了相同的东西。所以我的盒子只看到最后一英里的 http 流量。我\URL::forceScheme('https');在启动时使用它来让一切都玩得很好,而且它可以工作。

我使用这个 conf 文件从 Supervisor 启动 Horizo​​n:

问题

通过主管运行 Horizo​​n(或 queue:work)无法发送推送消息,并出现以下错误:

{"exception":"[object] (Illuminate\Broadcasting\BroadcastException(code: 0): at /var/www/crisis/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:121)

这是踢球者:如果我从命令行启动 Horizo​​n(或 queue:work),它就可以工作。 只有当我用 Supervisor 启动它时,它才会失败

有人知道从哪里开始吗?

我试过的:

  • 在 Supervisor 中更改用户 - 仍然失败
  • 将主管更改为启动队列 - 仍然失败
  • 在命令行上更改为 root - 仍然有效
  • 更换工人——如果主管仍然失败
  • 更多,但没有什么不同。

在供应商文件中转储变量,我能找到的唯一区别是:

与主管(失败):

使用命令行(成功):

当 Horizo​​n 从 Supervisor 与命令行启动时,我无法缩小 Pusher 的不同之处。有什么想法吗?