问题标签 [laravel-jobs]

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 投票
0 回答
33 浏览

laravel - 在 laravel 作业中循环

我想在用户登录后立即存储用户设置。

我想通过 laravel 工作来实现它。

我已经在控制器内完成了这个

在 InsertUserSetting 工作中我有

我不想在控制器中循环,我怎样才能在作业本身中做到这一点?

0 投票
1 回答
253 浏览

laravel - Laravel 队列执行两次

我正在使用带有队列的 laravel 通知。这是我的代码:

我这样称呼它......

这里的问题是作业执行了两次。它甚至在数据库的作业表中有两个条目。我在这里做错了什么?如果我想使用队列,我真的需要为每个通知单独创建作业吗?我的意思是它正在工作,但它只是执行了两次。

0 投票
0 回答
69 浏览

laravel - 在特定日期时间发送 webhook laravel 8

在我的应用程序(laravel 8)中,我创建了一些消息,将它们存储在 postgrey 数据库中,然后通过 webhook 将它们发送到 discord ans slack。我可以选择立即发送它们或使用数据库中的日期时间延迟它们。

这是我的问题。我不知道如何在截止日期到来时触发事件以通过 webhook 发送它们。

目前我唯一的解决方案是每分钟从数据库中获取所有未发送的消息,检查每条消息的到期日期时间,如果它们与当前日期时间匹配,则发送它们。

当我在我的数据库中存储延迟消息时,我想用现在的时间间隔和截止日期创建一个延迟事件/作业。

我在 2021 年 9 月 4 日 16 点创建了一条消息,发送日期为 2021 年 10 月 4 日 16 点

创建一个延迟 24 小时的事件,以便稍后通过我的 webhook 发送消息。当然,延迟会随着我创建的每条消息而变化,可能从几分钟到几天不等。

我在 laravel 8 中查看队列作业和事件,但我找不到有用的东西

这是我对消息模型的迁移

date_message 是我希望发送消息的日期

对不起我的英语不好,希望你能帮我找到解决办法

0 投票
2 回答
52 浏览

php - Laravel won't send anymore mails after testing my job class on prouction using "QUEUE_DRIVER=sync"

At first, it sends some emails then stopped without giving any errors, I tested tinker and it gives "null" without receiving anything!!

this is my config

#xA;
0 投票
0 回答
28 浏览

laravel - Laravel 的工作失败了,正在开发中

我在 laravel 有一份工作,使用 guzzle 对另一个 api 进行异步调用,接收一些地理空间数据,然后将其返回给我们自己的 Api。这在我的本地和我们的开发服务器上完美运行。但是当部署到我们的生产服务器时,由于空数组,作业失败,这让我相信数据没有在生产中返回。我遇到的麻烦是如何调试这个?我在数据库中查看失败的作业,但它只告诉我空数组。没有关于 api 调用和数据发生了什么。如果有一些安全问题或令牌。有谁知道我怎样才能更好地了解可能导致这种情况的原因?

0 投票
1 回答
62 浏览

laravel - 如何在作业中使用事务或当内存不足时如何在作业中回滚模型写入操作?

你好,

我有一份工作,处理以下操作:

  1. 导入数据,保存在db
  2. 更改已保存记录的状态
  3. 带有已保存记录的调度事件以进行进一步操作。

在第 2 点,队列进程耗尽内存并被杀死。所以我想在这里使用一个事务,这样如果第 2 点没有完全执行,我想回滚第 1 点操作。

目前我正在这样做:

如果没有内存泄漏,那么一切正常,如果内存泄漏发生在操作 2,那么我将不知道它并且无法回滚模型($model->rollback())。

如何做到这一点?目前它只是让事务保持打开状态,因为它们在发生内存泄漏时没有提交并且没有回滚。

请不要建议增加 php 内存限制

在工作中我们无法捕捉到致命错误,进程将在那里自行死亡。Laravel 队列侦听器具有识别内存何时耗尽的方法,但它不会抛出任何特定异常或不触发事件。

当工作进程终止时会触发一个事件(这是内存不足时发生的情况),但它不能像我们使用失败事件一样在作业内部使用。如果我们可以在工作进程终止时访问该事件,那么很容易删除模型上的写锁(基本上是它的回滚)。

0 投票
1 回答
541 浏览

laravel - 如何延迟 Laravel 作业队列

我正在尝试学习 Laravel 中的作业和队列,当我尝试学习新东西时,我总是自己举一个基本的例子,并尝试更好地理解工作流程。

好的,问题来了

我在 Laravel 中创建了一个 Job,正如您在 handle 方法中看到的那样,我只是想在 laravel.logger 上打印一条简单的消息,这完全正常。

我的问题是我想将这项工作延迟 2 分钟然后发送它,我已经尝试过这种方式但是没有成功,当调用索引方法时两个日志都立即打印但我想 $job = new SendEmailJob("This will show after 2 minutes");在 2 分钟后被调用而不打印立即地

0 投票
2 回答
52 浏览

php - 作业在测试期间错误地显示为已调度

我有以下测试用例:

只是向updateModel控制器推送一个发布请求。请求由以下方法处理:

很明显,我正在测试的是该作业不会被推送到队列中。但是,我的最终测试失败了:

我已通过dump()声明确认在第三次测试期间该工作没有被推动。通过交换第二个和第三个测试,测试套件成功通过,这表明在第二个测试中推入队列的作业已经持续到第三个测试。

我正在使用database队列驱动程序(QUEUE_CONNECTION=databasein .env.testing)并将RefreshDatabase特征导入到我的测试类中。这应该会在测试之间删除数据库,但似乎不是。

当我尝试手动清除队列时,我得到:

有没有办法清除setUp方法中的队列?我应该以不同的方式处理这个问题吗?

0 投票
0 回答
44 浏览

php - 如何在 laravel 中启动同名队列的多个实例?

我从 API 获得数百万行,我将数据分成块,首先我将整个数据以文本文件的形式存储在 Laravel 的存储目录中,因为将这么多数据直接插入数据库会导致很多问题,例如 max -execution-limit 等。然后我为每个文件调度一个作业,将文件中的数据插入数据库,但问题是每个文件中的数据太大,每个作业仍然需要 20 分钟。我已经为这个进程命名了队列from_file_to_database。那么我可以创建同名队列的多个实例并同时运行所有这些同名队列吗?

0 投票
0 回答
69 浏览

php - 通过 API 在外部应用程序中创建多条记录时的 Laravel 最佳实践

我正在开发一个 laravel (Inertia js) 应用程序,该应用程序通过其 API 连接到各种其他外部和内部系统。在其中一个模块中,用户可以在表单中输入多行/记录(这些行可以从 10 到 20 不等)。

提交表单后:

  • 我验证表单数据
  • 将数据存储在临时表中(这是一个简单的 MySQL 表,处理完成后删除数据,或者如果在外部系统中创建记录时出现任何问题,则将错误添加到行中)
  • 并派遣工作

这项工作的主要目的是在外部系统上处理 API 调用,例如

  • 创建客户记录
  • 创建用户登录帐户
  • 根据表单输入创建其他子实体

调度作业后,用户将被重定向到一个屏幕,他们可以在其中查看每条记录的进度(我使用 laravel 广播频道来触发事件,这会刷新页面,因此用户无需任何手动操作即可查看进度刷新)

我想了解是否有任何其他替代/最佳方法可以在没有临时表的情况下实现我正在做的事情?使用 Redis 缓存而不是临时表有什么好处吗?