PHP 做任务队列,现在常用的是哪个
发布网友
发布时间:2022-04-15 18:59
我来回答
共3个回答
懂视网
时间:2022-04-15 23:20
gearman 创建Mysql持久化队列的方式如下:
1. 登入mysql命令行,运行:
create database gearman;
2. 启动gearman,命令如下:
/usr/local/gearman/sbin/gearmand -p 4730 -L 0.0.0.0 --log-file=/tmp/gearmand-4730.log --pid-file=/tmp/gearmand-4730.pid -q MySQL --mysql-host=localhost --mysql-user=root --mysql-db=gearman --verbose DEBUG-d
具体的参数,根据自己的服务器状况去修改就行了。
3. 再次登入mysql命令行,执行:
use gearman;show tables;
就可以看到下面多了个“gearman_queue”的表。
这样,gearman就变成了持久化的方式。
=============================================================================
gearman用mysql持久化之后,其实会带来一些问题。
1. 每个任务都会写入数据库,这样会带来磁盘IO的损耗,并且gearman的性能瓶颈又多了一个可能,就是由数据库引起的性能问题。
2. mysql有个“wait_timeout”的参数,在mysql命令行中运行
show variables like "%timeout%";
可以看到wait_timeout的值,默认是28800。也就是说,如果一个mysql的连接,超过28800s没有任何响应,就会断开。
3. gearman持久化的方式,如果超过了mysql的wait_timeouts的时间没有任何响应,和数据库的连接就会被mysql断开,而且gearman目前是没有mysql重新连接的,结果就是,会导致如下错误,必须重启gearman才能重新正常工作。
gearman报错
ERROR 2014-04-01 02:10:02.897899 [ proc ] mysql_stmt_execute failed: -> libgearman-server/plugins/queue/mysql/queue.cc:357
ERROR 2014-04-01 02:10:02.897910 [ proc ] gearman_server_job_add gearman_server_run_command(QUEUE_ERROR) -> libgearman-server/server.cc:301
所以,gearman持久化方式带来的缺点显而易见,该方式下,要避免gearman对mysql连接超时断开,可以将mysql的wait_timeout参数改大。
或者,直接放弃用mysql的持久化方式。
热心网友
时间:2022-04-15 20:28
生产环境用过 Gearman + Redis。 Gearman 用来做 worker 的调度,Redis 保存 workload。持久化用 MySQL 慢慢倒腾。
php是单线程的脚本,就算是有队列,也是模拟的队列,服务端只能一个一个执行
热心网友
时间:2022-04-15 21:46
数组队列就好了,或者入栈出栈
目前流行的php开发工具有(用php开发的大型应用)
laravel可以说是从去年到今年都是最热门的PHP框架之一,它的优势在于易学习,上市容易,强大的扩展类库,可以直接使用Composer引用(laravel5.5以后不需要在文件引用外加的扩展类),你可以在它的官方文档中找到很多你能用的到的扩展类,不需要自己再进行开发,方便的artisan命令,一键生成MVC以及其他常用文件,并且支持队列,数据库...
大型的 PHP应用 通常使用什么应用做 消息队列 的
目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。 二、消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式。
thinkphp 的 think-queue 队列使用
总之,使用 ThinkPHP 的 think-queue 队列功能,你需要完成依赖包的安装、配置队列驱动、创建队列文件、设置监听器以及执行任务等步骤。借助 Redis 的高效存储能力,你可以轻松实现消息队列的发送、接收与处理,提高应用的并发处理能力与稳定性。
workerman
Workerman概述 Workerman是一款基于PHP的开源高性能的工作进程框架,主要用于构建后台任务、消息队列等应用场景。它支持并发处理多个任务,具有稳定可靠、易于扩展的特点。下面详细介绍Workerman的特点和应用场景。Workerman的特点 1. 并发处理:Workerman基于PHP的多进程技术,能够同时处理多个任务,提高了系统的并发...
PHP实现消息队列MQ
在PHP中实现消息队列,首先需要安装RabbitMQ扩展,并在项目中添加Composer.json文件以整合RabbitMQ。实现包括简单模式(一对一)、Work模式(轮循队列)、Work模式(能者多劳)、每个消息只有一个消费者、发送者和接受者没有时间依赖、接受者确认消息接受和处理成功。Pub/Sub模式在RabbitMQ中实现松耦合设计...
PHP优先队列、二叉堆、大顶堆、小顶堆
优先队列也是一种数据结构,通过加权值进行排序,PHP核心库提供了 SplPriorityQueue 对象来实现。 优先队列内部是用 Heap:堆 这种数据结构来实现的,默认是大顶堆(MaxHeap)。优先队列改成小顶堆,需要重写compare方法,将比较值对调,即可切换小顶堆和大顶堆。堆就是为了实现优先队列而设计的一种...
ThinkPHP6 队列think-queue源码解析
总结,ThinkPHP 通过 redis 驱动提供了一套灵活的队列机制,包括主队列(redis 列表)、保留队列(redis 有序集合)和延迟队列(redis 有序集合),分别服务于执行任务、备份任务和处理过期任务。这套机制通过链表和有序集合的特性,实现了任务的异步执行、重试和过期处理,有效提升了应用的并发能力和稳定性...
TP6队列think-queue
延时队列的概念:延时队列是一种特殊类型的队列,它不仅具备队列的基本特性,还增加了延迟处理消息的功能,允许我们设定消息在特定时间点被处理。使用think-queue的方法:1.首先安装think-queue。2.接着安装redis。3.配置队列,具体操作是在项目根目录下的config文件夹中的queue.php文件里进行。4.创建队列...
PHP+Laravel框架RabbitMQ简单使用(PTP)
}}2.创建消费者因为消费者是需要常驻内存的,所以需要在cli下运行,我们可以通过以下操作创建一个任务。?php?artisan?make:command?RabbitmqConsumerCommand 基本代码(接下来就在command里面写消费消息的逻辑)<?phpnamespace?App\Console\Commands;use?Illuminate\Console\Command;use?PhpAmqpLib\Connection\...
PHP使用Beanstalkd做任务队列,是不是代表需要有一个PHP常驻进程
不是必须,你可以用Beanstalkd支持的任何语言 这里有一份Client Libraries清单:https://github.com/kr/beanstalkd/wiki/client-libraries