问题标签 [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.
php - Laravel Mailable 使用正确的模型,然后使用不正确的模型发送第二个不需要的电子邮件
我有一种情况,我正在建立一个 FTP 连接来收集数据,循环通过它注册新的或使用firstOrCreate
. 这是每 10 分钟在调度程序上运行一次,我使用 Laravel Horizon 来管理队列。
问题是,当我运行调度程序时,我发送了一份包含正确数据的查询和一份包含错误数据的查询(只有一封电子邮件)。
如果数据不正确但远非理想,我发现了一个使用急切加载和失败的小解决方法。
从下图中可以看出,创建了两个使用不同 ID 的作业。220 正确,29 错误。
当我记录正在循环的内容时,它只显示一项(220)。
我也无法使用命令重新创建错误,因此似乎(尽管未确认)仅在调度程序中发生。
有谁知道为什么会这样?
javascript - Vue 对象未使用 axios POST 请求进行更新
并且通知对象在 html 模板中也没有任何内容。
注意:相同的代码在我只有这个 vue 实例的所有页面上都可以正常工作。在另一个页面(localhost/horizon)上(使用 laravel horizon 包并更新它的 layout.blade.php),其中有两个 vue 实例,一个用于通知,另一个用于 Laravel/Horizon,此请求不返回任何内容。
laravel - 使用 Laravel Horizon 进行动态配置
我正在尝试更改邮件驱动程序username
,并且password
如下所示。
动态配置设置在队列作业中。对于队列处理,我使用的是 Laravel Horizon。但是,当我执行队列作业时。它仍然使用默认配置。不是我动态设置的配置。
注意:当我在配置设置后立即登录时,它显示的是动态值。
如何动态设置配置并使 Laravel Horizon 使用动态配置?
laravel - Laravel Horizon:同一服务器上的多个实例相互干扰
我有 3 个 Laravel 应用程序都在需要用于 Horizon 的同一台服务器上运行。
我遇到了一个问题,即无法运行冲突和作业的应用程序。
使用 Medis 检查 Redis 数据库后,我可以看到每个作业都有 3 个条目:
- PRODUCTION_horizon:2
- STAGING_horizon:2
- HRS_horizon:2
其中production
和是我的应用程序名称,并且staging
是作业的 ID。hrs
2
如果作业是从中分派的,staging
它可能仍被production
or拾取hrs
,然后只是等待暂存,从未实际运行。
经过大量搜索后,我找到了解决此问题的方法,方法是在我的所有队列前面加上应用程序名称。
所以我的配置从此改变:
对此:
这实际上使它起作用了!所以基本上我已经修复了它。
但这感觉真的不对。
现在,当我将作业分派到特定队列时,我必须做MyJob::dispatch()->onQueue(config('app.name') . '_emails');
这显然是不理想的。
我觉得必须有更好的方法,但文档中没有解释如何做到这一点。
有没有办法阻止地平线相互干扰?也许我应该使用多个 Redis 数据库之类的?
我意识到发布一个我已经找到解决方案的问题可能看起来很奇怪,但我想在盲目询问之前尝试自己修复它,虽然我找到了解决方案,但我真的很恼火,可能有很多更简单的解决方案我只是不知道。最坏的情况,如果没有更好的解决方案,其他有同样问题的人会找到这个并发现我的解决方案。
php - Laravel 队列有时会重复一个作业
我正在使用 Laravel 5.7 制作网站爬虫。队列在 Redis 驱动程序上,我正在使用 laravel Horizon 来运行该作业。我只想同时运行或排队一个作业,但是它有时会复制一个作业并最终同时运行同一作业的多个实例。有什么方法可以保证一次只运行一个作业?
职位类别
{ 使用 Dispatchable、InteractsWithQueue、Queueable、SerializesModels;
}
如果作业失败,我想再次将该作业排队,除非它被手动停止。如果作业达到限制,我还想将作业放回队列。
队列.php
返回 [
];
laravel - Laravel Horizon 一半的工作都失败了
我在我的服务器上设置了 laravel Horizon,我发现一半的作业都失败了,并出现以下错误:
不知道为什么会发生这种情况,但队列在我的本地环境中运行良好。有没有人遇到过这些问题
代码如下
调用调度方法
调用工作类
调用通知类
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
- 数据库驱动程序和版本:-
我们的 Horizon 出现了奇怪的错误。基本上这就是发生的事情: - 一个作业排队。并开始处理。
90 秒后(我们的超时配置值)它超时。
120 秒(我们的
retry_after
值)后重试作业。重试作业成功。
15 分钟或 30 分钟后,原始作业(超时)完成。随着运行实际工作。
似乎这可能发生在任何类型的工作中。例如,如果它是排队的可邮寄邮件,则用户首先收到一封电子邮件,然后在 15 或 30 分钟后用户收到另一封电子邮件。一样的。
这是我们的配置文件
config/database.php
:
config/queue.php
:
config/horizon.php
:
这是它在 Horizon 仪表板中的外观
当初始作业超时时。Recent Jobs
在重试工作时,
它会保持这种状态。
差不多半个小时后变成这样:
标签是一样的,我只是把名字涂黑了。
这是我们看到的日志(这里的时间是 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 则没有。
我们尝试了很多不同的组合,以消除问题。它发生在每一个组合中。所以我们认为这一定与 Horizon 有关系。
我们尝试了: - Predis 与 Redis 5 和 Redis 3
read_write_timeout
具有不同值的 PredisPHPRedis 与 Redis 5 和 Redis 3
THP 在一台服务器上启用。因此,我们还尝试了与禁用 THP 的服务器的所有组合。
我们在 Laravel 6.11 和 Horizon 3.4.7 然后升级到 Laravel 6.14 和 Horizon 3.7.2
只有一个 Horizon 实例正在运行。此 Horizon 实例中不处理任何其他队列。
欢迎任何信息或提示尝试!
laravel-nova - Nova Queued Actions 触发多个作业
我已经创建了一个动作:
然后,我为 1128 个项目(两次)触发它并观察结果:
默认情况下,批次按 200 个项目分组,据我所见,同时产生了 3 个作业。不幸的是,没有办法知道哪个作业将首先被处理,因此每个批次更改的模型都会显示在日志中,如输出所示:621525, 412186, 621282
当第一次调用动作和621282, 621525, 412186
第二次调用动作时(模型在作业之间拆分同样的方式,但处理的作业顺序发生了变化)。这里的问题是,如果我将视图保存到 CSV 文件,则顺序很重要。
我希望在给定的时间为给定的行动只产生一份工作,这将解决我的问题。这可能吗?
使用 Horizon 作为队列工作者
laravel - 从 Laravel Horizon 中获取日志,在主管的 docker 中运行
在 Supervisor 的帮助下,我使用Laravel Horizon来处理我的 Laravel 应用程序中的作业。整个设置在 ECS 中的 docker 上运行。在 ECS 的主机节点(由 Fargate 管理)上,我运行了 datadog 代理,它将获取容器的 stdout/stderr 并将其放入 datadog 中(这样我就可以集中访问日志)。
我注意到的是,我没有从正在处理的作业中获取任何日志。即使是简单print("test");
的工作代码也不会进入标准输出。
这是我的设置:
Dockerfile
yaml 中这个的服务定义如下所示:
这是我的内容horizon.conf
:
知道我可能会错过什么吗?我无法通过主管从 docker 中的 Horizon 处理的作业中获取日志?
laravel - Laravel Pusher 仅在使用 Supervisor 启动 Horizon 时才会失败
很难为此提供正确的信息。已经好几天了。我让 Pusher 在 Vagrant 中运行良好。我使用基本的 Horizon 配置(产品/本地无关紧要)来支持它:
所有这一切都在Laravel 的 Stancl Tenancy 背后。一切正常。我已经在生产箱上安装了完全相同的系统。这也很好。
我现在已经在一个使负载平衡器和 SSL 复杂化的业务中安装了相同的东西。所以我的盒子只看到最后一英里的 http 流量。我\URL::forceScheme('https');
在启动时使用它来让一切都玩得很好,而且它可以工作。
我使用这个 conf 文件从 Supervisor 启动 Horizon:
问题:
通过主管运行 Horizon(或 queue:work)无法发送推送消息,并出现以下错误:
{"exception":"[object] (Illuminate\Broadcasting\BroadcastException(code: 0): at /var/www/crisis/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:121)
这是踢球者:如果我从命令行启动 Horizon(或 queue:work),它就可以工作。 只有当我用 Supervisor 启动它时,它才会失败。
有人知道从哪里开始吗?
我试过的:
- 在 Supervisor 中更改用户 - 仍然失败
- 将主管更改为启动队列 - 仍然失败
- 在命令行上更改为 root - 仍然有效
- 更换工人——如果主管仍然失败
- 更多,但没有什么不同。
在供应商文件中转储变量,我能找到的唯一区别是:
与主管(失败):
使用命令行(成功):
当 Horizon 从 Supervisor 与命令行启动时,我无法缩小 Pusher 的不同之处。有什么想法吗?