lumen 队列处理
数据库
要使用 database 队列驱动,你需要数据表保存任务信息(比如失败任务)。要生成创建这些表的迁移,
可以在项目目录下运行 Artisan 命令 queue:table,迁移被创建之后,可以使用 migrate 命令生成这些表:
php artisan make:migration create_jobs_table --create=jobs
php artisan queue:table
php artisan queue:failed_jobs
php artisan migrate
运行后生成failed_jobs、jobs、migrations三张表。
队列的配置选项都在 .env 文件中。
如果您想要完全自定义队列的配置,您必须将 vendor/laravel/lumen-framework/config/queue.php 文件完整的复制到你的项目根目录中的 config 目录,并且要调整必要的配置。如果 config 目录不存在,则要创建。
.env 中需要修改
QUEUE_CONNECTION=database
注意,如果不修改这个配置的话,job 就不会存入数据表,而是同步执行。
创建Jobs/TestJob.php
<?php namespace App\Jobs;
use Illuminate\Support\Facades\Log;
class TestJob extends Job
{
protected $str;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($str)
{
$this->str=$str;
} /**
* 执行任务
*
* @return void
*/
public function handle()
{
echo "hello job";
Log::info("Job:".$this->str);
} /**
* 任务失败的处理过程
*
* @param Exception $exception
* @return void
*/
public function failed(Exception $exception)
{
// 给用户发送任务失败的通知,等等……
}
}
在控制里里调用队列
dispatch(new TestJob('this is job'));
到这里已经在数据插入到数据库了
要怎么动行队列里的任务呢
运行队列处理器
php artisan queue:work
Tip:要使 queue:work 进程一直在后台运行,你应该使用进程管理器比如 Supervisor 来确保队列处理器不会停止运行
配置 Supervisor
Supervisor 的配置文件通常位于 /etc/supervisor/conf.d 目录下。在该目录中,你可以创建任意数量的配置文件,用来控制 supervisor 将如何监控你的进程。例如,创建一个 laravel-worker.conf 文件使之启动和监控一个 queue:work 进程:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep= --tries=
autostart=true
autorestart=true
user=forge
numprocs=
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
在这个例子中,numprocs 指令将指定 Supervisor 运行 8 个 queue:work 进程并对其进行监控,如果它们挂掉就自动重启它们。你应该更改 command 选项中的 queue:work sqs 部分以表示你所需的队列连接。
启动 Supervisor
配置文件创建完毕后,你就可以使用如下命令更新 Supervisor 配置并启动进程了:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
lumen 队列处理的更多相关文章
- Lumen 队列
队列 简介 连接 Vs. 队列 驱动的必要设置 创建任务类 生成任务类 任务类结构 分发任务 延迟分发 任务链 自定义队列 & 连接 指定任务最大尝试次数 / 超时值 频率限制 错误处理 运行 ...
- Lumen开发:结合Redis实现消息队列(3)
4.运行队列监听器 开启任务监听器 Lumen包含了一个Artisan命令用来运行推送到队列的新任务.你可以使用queue:listen命令运行监听器: php artisan queue:liste ...
- Lumen开发:结合Redis实现消息队列(1)
1.简介 Lumen队列服务为各种不同的后台队列提供了统一的API.队列允许你推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度. 1.1 配置 .env文件的QUEUE_DRIVER选项 ...
- lumen
HTTP路由 基本路由 路由参数 必填参数 可选参数 正则表达式约束 命名路由 路由组 中间件 命令空间 路由前缀 基本路由 你可以在 route/web.php 文件中定义应用程序的全部路由.最基本 ...
- Lumen开发:结合Redis实现消息队列(2)
上一篇讲了Lumen配置Redis,现在来讲一下,如何实现消息队列 2.编写任务类 2.1 任务类结构 默认情况下,应用的所有队列任务都存放在app/Jobs目录.任务类非常简单,正常情况下只包含一 ...
- LaravelS - 基于Swoole加速Laravel/Lumen
LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 ...
- Lumen 使用事件需要注意的事项
Lumen 版本 5.2 参考手册 laravel event 需要注意的事项 如果是第一次在lumen下使用事件,需要修改bootstrap\app.php文件 添加对EventServicePro ...
- laravel_Supervisor队列
Queue 1. 队列驱动 //数据库驱动,修改.env的QUEUE_DRIVER QUEUE_DRIVER=database 1. 数据库表 php artisan queue:table php ...
- 剖析虚幻渲染体系(06)- UE5特辑Part 2(Lumen和其它)
目录 6.5 Lumen 6.5.1 Lumen技术特性 6.5.1.1 表面缓存(Surface Cache) 6.5.1.2 屏幕追踪(Screen Tracing) 6.5.1.3 Lumen光 ...
随机推荐
- Python 命名规范总结
Python推荐命名规范: 模块名和包名采用小写字母并且以下划线分隔单词的形式: 如:browser_driver 类名或异常名采用每个单词首字母大写的方式: 如:BasePage, Keyboard ...
- 【LOJ】#3097. 「SNOI2019」通信
LOJ#3097. 「SNOI2019」通信 费用流,有点玄妙 显然按照最小路径覆盖那题的建图思路,把一个点拆成两种点,一种是从这个点出去,标成\(x_{i}\),一种是输入到这个点,使得两条路径合成 ...
- Python 第一节随堂练习
作业: 1 从键盘输入一个整数,判断该数字能否被2和3同时整除,能否被2整除,能否被3整除,不能被2和3整除,输出相应信息 1 my_num = int(input('请输入一个整数')) 2 if ...
- 12.如何设置ulimit
ulimit -a用来显示当前的各种用户进程限制 修改所有 linux 用户的环境变量文件:vi /etc/profileulimit -u 10000 #用户的最大进程数u ...
- javascript 仿jQuery的无new构造函数
/* 匿名函数 传入 window 值全局变量成为局部变量 */ (function(window,undefined) { /* 申明一个名为jQuery 的函数*/ function jQuery ...
- Wannafly挑战赛23
B. 游戏 大意: $n$堆石子, 第$i$堆初始$a_i$, 每次只能选一堆, 假设一堆个数$x$, 只能取$x$的约数, 求先手第一步必胜取法. SG入门题, 预处理出所有$SG$值. 先手要必胜 ...
- 使用Harbor搭建Docker私有仓库
ip:192.168.0.145 环境设置 防火墙,selinux等,可以使用本章开头的那个shell脚本 其他主机的hosts文件也都添加上 ip hub.aaa.com windows系统的hos ...
- finally代码块的执行
try{ //todo }catch(Exception e){ //todo }finally{ //todo } 1.不管try,catch里面的代码快有无return,finally都会执行 2 ...
- Scala学习十四——模式匹配和样例类
一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...
- 微信小程序实现折叠面板
wxml: <view class='help'> <view class='help_item'> <view class='title' data-index='1' ...