laravel_Supervisor队列
Queue
1. 队列驱动
//数据库驱动,修改.env的QUEUE_DRIVER
QUEUE_DRIVER=database
1. 数据库表
php artisan queue:table
php artisan queue:failed-table
php artisan migrate
3.创建任务类
<?php
namespace App\Jobs;
use Illuminate\Support\Facades\Log;
class LogTestJob extends Job
{
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
} /**
* Execute the job.
*
* @return void
*/
public function handle()
{
sleep(5);
for($i = 1; $i <= 10000; $i ++) {
Log::info("--$i--");
}
}
}
1. 分发任务
<?php
namespace App\Http\Controllers; use App\Jobs\LogTestJob;
use Illuminate\Support\Facades\Queue;
use Laravel\Lumen\Routing\Controller as BaseController; class TestController extends BaseController
{
/**
* 测试队列任务分发
* @description
* @author csl
*/
public function logTestJob(){
$job = (new LogTestJob())->onQueue('log');// 任务将被委派到 "log" 队列
dispatch($job);
}
}
1. 运行队列进程
//监听queue为"log"的队列
php artisan queue:work --queue=log //监听queue为"default"的队列,--queue默认为default
php artisan queue:work //onQueue方法指定queue的名称
$job = (new LogTestJob())->onQueue('log');
1. 任务过期
`config/queue.php` 配置文件里,每一个队列连接都定义了一个 ` retry_after ` 选项。这个选项指定了任务最多处理多少秒后就被当做失败重试了。比如说,如果这个选项设置为 ` 90 `,那么当这个任务持续执行了 ` 90 ` 秒而没有被删除,那么它将被释放回队列。通常情况下,你应该把 `retry_after` 设置为最长耗时的任务所对应的时间。
1. 任务超时
` queue:work ` Artisan 命令对外有一个 ` --timeout ` 选项,默认60秒。这个选项指定了 `Laravel` 队列处理器最多执行多长时间后就应该被关闭掉。有时候一个队列的子进程会因为很多原因僵死,比如一个外部的 HTTP 请求没有响应。这个 `--timeout` 选项会移除超出指定事件限制的僵死进程。
<?php
namespace App\Jobs;
class ProcessPodcast implements ShouldQueue
{
/**
* 任务运行的超时时间。
*
* @var int
*/
public $timeout = 120;
} 或 php artisan queue:work --timeout=120
` retry_after ` 配置选项和 ` --timeout` 命令行选项是不一样的,但是可以同时工作来保证任务不会丢失并且不会重复执行。
` --timeout ` 应该永远都要比 ` retry_after` 短至少几秒钟的时间。这样就能保证任务进程总能在失败重试前就被杀死了。如果你的 `--timeout` 选项大于 `retry_after` 配置选项,你的任务可能被执行两次。
1. 配置Supervisor
**安装Supervisor**
Supervisor 是 Linux 系统中常用的进程守护程序。如果队列进程 queue:work 意外关闭,它会自动重启启动队列进程。在 Ubuntu 安装Supervisor 非常简单:
sudo apt-get install supervisor
**配置Supervisor**
Supervisor 配置文件通常存放在 ` /etc/supervisor/conf.d ` 目录,在该目录中,可以创建多个配置文件指示 `Supervisor` 如何监视进程,例如,让我们创建一个开启并监视`queue:work` 进程的 BBB_log_queue.log 文件:
[program:BBB_log_queue]
process_name=%(program_name)s_%(process_num)02d
command=php /home/chaishuliang/www/BBB/artisan queue:work --queue=log --delay=5 --sleep=3 --tries=3
autostart=true
autorestart=true
;user=forge
numprocs=5
redirect_stderr=true
stdout_logfile=/home/chaishuliang/www/supervisor/stdout_log/BBB_log_queue.log
**启动Supervisor**
当你成功创建配置文件后,你需要刷新 Supervisor 的配置信息并使用如下命令启动进程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start BBB_log_queue:* //Start all processes in a group,BBB_log_queue共5个进程(numprocs)
或 sudo supervisorctl start all
1. 队列处理器 & 部署
因为队列处理器都是 long-lived 进程,如果代码改变而队列处理器没有重启,他们是不能应用新代码的。所以最简单的方式就是重新部署过程中要重启队列处理器。你可以很优雅地只输入 `queue:restart` 来重启所有队列处理器。
php artisan queue:restart //修改代码后执行,队列才会读取新代码
laravel_Supervisor队列的更多相关文章
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- Beanstalkd一个高性能分布式内存队列系统
高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...
- .net 分布式架构之业务消息队列
开源QQ群: .net 开源基础服务 238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ##业务消 ...
- 【原创经验分享】WCF之消息队列
最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...
- 缓存、队列(Memcached、redis、RabbitMQ)
本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...
- Java消息队列--ActiveMq 实战
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...
随机推荐
- windows游戏编程地址
本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22309325 作者:jadeshu 邮箱: jades ...
- 解决node-sass无法下载的问题
本文链接:https://blog.csdn.net/qq383366204/article/details/86605960在国内用npm安装依赖的时候经常都会有各种奇怪的问题,个人强烈推荐用yar ...
- c++ 生成容器元素生成随机数
// random_shuffle example #include <iostream> // cout #include <algorithm> // random_shu ...
- centos6中安装VMware Tools
使用的是centos6.8,其他6版本方法大致相同. 1 .工具/原料1)安装过虚拟机软件的计算机2)linux操作系统 3)虚拟机配置VMware tools文件, 点击工具栏上的[虚拟机],然后选 ...
- Python 自学笔记(二)
3-1.条件判断 3-1.条件判断 3-1-1.单项判断 if 3-1-2.双向判断 if...else... 3-1-3.多向判断 if...elif...else 3-2.if嵌套 4.输入 4- ...
- kotlin之函数的基本用法
fun main(arg: Array<String>) { val )//调用函数 print(double) } fun double(x:Int):Int{ *x } kotlin函 ...
- Storm和Hadoop 区别
Storm - 大数据Big Data实时处理架构 什么是Storm? Storm是:• 快速且可扩展伸缩• 容错• 确保消息能够被处理• 易于设置和操作• 开源的分布式实时计算系统- 最初由Na ...
- uni-app 使用 iconfont 图标 自定义图标
uni-app 的uni-ui 的 Icon 图标组件,裡面的图标只是移动端常见的图标,对于一些其他需求所要显示的图标,这个是完全不够用.那么怎么办?模仿它的组件,用阿里巴巴图标矢量库的图标,自己定义 ...
- JAVA 基础编程练习题45 【程序 45 被 9 整除】
45 [程序 45 被 9 整除] 题目:判断一个素数能被几个 9 整除 package cskaoyan; public class cskaoyan45 { public static void ...
- JAVA 基础编程练习题30 【程序 30 插入数字】
30 [程序 30 插入数字] 题目:有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的 ...