PHP如何在php中实现队列处理

ASH*_*OSH 22 php queue

我希望我的客户发送的数据(通过邮件)放在队列中,我服务器上的PHP脚本首先检查队列是否为空.如果队列不为空,那么脚本将逐个处理队列中的所有数据.我该怎么办?

Ber*_*her 9

你可以使用Zero MQ之类的东西

参见Rasmus Lerdorf的例子.

您还可以考虑使用Gearman来分配负载.


Mak*_*yar 7

这是您可以使用enqueue库轻松完成的操作.首先,您可以选择各种传输,例如AMQP,STOMP,Redis,Amazon SQS,Filesystem等.

其次,这非常容易使用.让我们从安装开始:

您必须安装enqueue/simple-client库和其中一个传输.假设您选择了一个文件系统,请安装enqueue/fs库.总结一下:

composer require enqueue/simple-client enqueue/fs 
Run Code Online (Sandbox Code Playgroud)

现在让我们看看如何从POST脚本发送消息:

<?php
// producer.php

use Enqueue\SimpleClient\SimpleClient;

include __DIR__.'/vendor/autoload.php';

$client = new SimpleClient('file://'); // the queue will store messages in tmp folder

$client->sendEvent('a_topic', 'aMessageData');
Run Code Online (Sandbox Code Playgroud)

消费脚本:

<?php
// consumer.php

use Enqueue\SimpleClient\SimpleClient;
use Enqueue\Psr\PsrProcessor;
use Enqueue\Psr\PsrMessage;

include __DIR__.'/vendor/autoload.php';

$client = new SimpleClient('file://');

$client->bind('a_topic', 'a_processor_name', function(PsrMessage $psrMessage) {
   // processing logic here

   return PsrProcessor::ACK;
});

// this call is optional but it worth to mention it.
// it configures a broker, for example it can create queues and excanges on RabbitMQ side. 
$client->setupBroker();

$client->consume();
Run Code Online (Sandbox Code Playgroud)

consumer.php通过使用supervisord或其他进程管理器运行尽可能多的进程,在本地计算机上,您可以运行它而无需任何额外的库或包.

这是一个基本的例子,enqueue有很多其他功能可能会派上用场.如果您有兴趣,请查看入队文件.


nul*_*ent 3

看看这个

它使用 memcached 进行持久化。