Laravel:运行 queue:listen 连续 Windows Azure Web App
Laravel: Running queue:listen continuously on Windows Azure Web App
我觉得问这个问题有点傻,但我似乎无法在互联网上找到这个问题的答案。搜索了几个小时后,我发现在 linux 服务器上,您使用 Supervisor 在您的网站上连续 运行 "php artisan queue:listen"(有或没有守护进程)来处理推送到队列中的作业。这一切都很好,但是如果我想在 Windows Azure Web 应用程序上执行此操作怎么办?在搜索解决方案后,我发现:
- 每分钟(或每 X 分钟)对 运行 "php artisan queue:listen" 进行一次计时作业,我真的不喜欢这个解决方案,并且希望在站点获得更多流量时特别避免使用它;
- 添加一个连续 运行s "php artisan queue:listen" 的 WebJob(这里的问题是我不知道如何为 WebJob 编写脚本...);
我想向你们寻求帮助,了解其中哪一个是正确的解决方案,是否有更好的解决方案,如果 WebJob 是最好的解决方案,我该如何为此编写脚本?提前致谢。
简而言之,Supervisor 是 nohup(不挂断)的现代替代品,并添加了其他一些零碎内容。简而言之,还有其他资源可以将任务 运行 保留在后台(守护程序),我用于基于 Windows 的项目(非常少 tbh)的解决方案是 Forever 我通过以下方式发现:
C:\myprojectroot > forever -c php artisan queue:listen --queue=some_nice_queue --tries=3
如何?
为 Windows 安装 node
,然后使用 npm
安装 Forever
C:\myprojectroot > npm install -g forever
如果您无法在 Windows 上获取 Node 运行,我推荐 Windows 包管理器,Chocolatey
https://chocolatey.org/packages?q=node
一定要检查 Forever
创建的任何日志文件,因为我留下的日志文件足够长以消耗 30Gb 的磁盘空间 space!
对于 Azure,您可以为您的 Web 应用创建一个新的 Web 作业,并上传一个包含如下命令的 .cmd 文件。
php %HOME%\site\wwwroot\artisan queue:work --daemon
并将其定义为 triguered 和 0 * * * * * 频率 cron。
这种方式适合我。
最佳。
首先,您不能在 Azure 上将 WebJob 与 Laravel 一起使用。 Azure PHP Web 应用托管在 Linux 上。 WebJobs 目前不适用于 Linux。
在 Azure Laravel 中执行计时作业的最佳方法是创建一个 Azure 逻辑应用程序。您使用重复触发器,然后使用 HTTP 操作将 POST 请求发送到您的 Laravel Web 应用程序。您可以使用此周期性心跳 运行 执行您需要执行的任何操作。请务必向您的 POST 请求添加身份验证。
您将遇到的下一个问题是 POST 将是同步的,因此您正在做的工作不能很广泛,否则您的 HTTP 请求将超时,或者您将达到 PHP 的时间限制脚本(60 秒)。
解决方案不是 Laravel 作业,因为在这里你又需要一些东西 运行在后台处理队列。
解决方案也不是 PHP 线程。标准 Azure PHP Web 应用程序不支持 PHP 线程。您当然可以构建自己的 Web 应用程序并启用 PHP 线程,但这确实是逆流而上。
您只需要忍受同步逻辑。所以你用心跳做的工作应该不会超过大约 60 秒。
如果您需要更广泛的处理,那么您确实需要将其卸载到另一个地方:另一个 Web 应用程序、一个 Azure 函数等。
但为什么不首先这样做呢?原因是成本和复杂性。如果您有一些简单的东西……比如每日报告……您只需将报告连接到心跳,所有用于生成报告的工具都在 Laravel 中。将每日报告分离到它自己的容器中需要设置,并且它 运行 所在的 Web 应用程序会产生成本......在我看来,为了一些简单的事情不值得。
我觉得问这个问题有点傻,但我似乎无法在互联网上找到这个问题的答案。搜索了几个小时后,我发现在 linux 服务器上,您使用 Supervisor 在您的网站上连续 运行 "php artisan queue:listen"(有或没有守护进程)来处理推送到队列中的作业。这一切都很好,但是如果我想在 Windows Azure Web 应用程序上执行此操作怎么办?在搜索解决方案后,我发现:
- 每分钟(或每 X 分钟)对 运行 "php artisan queue:listen" 进行一次计时作业,我真的不喜欢这个解决方案,并且希望在站点获得更多流量时特别避免使用它;
- 添加一个连续 运行s "php artisan queue:listen" 的 WebJob(这里的问题是我不知道如何为 WebJob 编写脚本...);
我想向你们寻求帮助,了解其中哪一个是正确的解决方案,是否有更好的解决方案,如果 WebJob 是最好的解决方案,我该如何为此编写脚本?提前致谢。
简而言之,Supervisor 是 nohup(不挂断)的现代替代品,并添加了其他一些零碎内容。简而言之,还有其他资源可以将任务 运行 保留在后台(守护程序),我用于基于 Windows 的项目(非常少 tbh)的解决方案是 Forever 我通过以下方式发现:
C:\myprojectroot > forever -c php artisan queue:listen --queue=some_nice_queue --tries=3
如何?
为 Windows 安装 node
,然后使用 npm
安装 Forever
C:\myprojectroot > npm install -g forever
如果您无法在 Windows 上获取 Node 运行,我推荐 Windows 包管理器,Chocolatey
https://chocolatey.org/packages?q=node
一定要检查 Forever
创建的任何日志文件,因为我留下的日志文件足够长以消耗 30Gb 的磁盘空间 space!
对于 Azure,您可以为您的 Web 应用创建一个新的 Web 作业,并上传一个包含如下命令的 .cmd 文件。
php %HOME%\site\wwwroot\artisan queue:work --daemon
并将其定义为 triguered 和 0 * * * * * 频率 cron。
这种方式适合我。
最佳。
首先,您不能在 Azure 上将 WebJob 与 Laravel 一起使用。 Azure PHP Web 应用托管在 Linux 上。 WebJobs 目前不适用于 Linux。
在 Azure Laravel 中执行计时作业的最佳方法是创建一个 Azure 逻辑应用程序。您使用重复触发器,然后使用 HTTP 操作将 POST 请求发送到您的 Laravel Web 应用程序。您可以使用此周期性心跳 运行 执行您需要执行的任何操作。请务必向您的 POST 请求添加身份验证。
您将遇到的下一个问题是 POST 将是同步的,因此您正在做的工作不能很广泛,否则您的 HTTP 请求将超时,或者您将达到 PHP 的时间限制脚本(60 秒)。
解决方案不是 Laravel 作业,因为在这里你又需要一些东西 运行在后台处理队列。
解决方案也不是 PHP 线程。标准 Azure PHP Web 应用程序不支持 PHP 线程。您当然可以构建自己的 Web 应用程序并启用 PHP 线程,但这确实是逆流而上。
您只需要忍受同步逻辑。所以你用心跳做的工作应该不会超过大约 60 秒。
如果您需要更广泛的处理,那么您确实需要将其卸载到另一个地方:另一个 Web 应用程序、一个 Azure 函数等。
但为什么不首先这样做呢?原因是成本和复杂性。如果您有一些简单的东西……比如每日报告……您只需将报告连接到心跳,所有用于生成报告的工具都在 Laravel 中。将每日报告分离到它自己的容器中需要设置,并且它 运行 所在的 Web 应用程序会产生成本......在我看来,为了一些简单的事情不值得。