首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中实现队列处理?

如何在PHP中实现队列处理?
EN

Stack Overflow用户
提问于 2012-07-06 14:47:12
回答 6查看 47.4K关注 0票数 23

我希望将客户端(通过post)发送的数据放在一个队列中,服务器上的php脚本首先检查队列是否为空。如果队列不为空,那么脚本将按one.How逐个处理队列中的所有数据。我要这样做吗?

EN

回答 6

Stack Overflow用户

发布于 2017-06-20 21:12:10

这是您可以使用enqueue库轻松完成的事情。首先,您可以从各种transports中进行选择,例如AMQP、STOMP、Redis、Amazon SQS、文件系统等。

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

您必须安装enqueue/simple-client库和one of the transports。假设您选择文件系统,请安装enqueue/fs库。总结一下:

代码语言:javascript
复制
composer require enqueue/simple-client enqueue/fs 

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

代码语言:javascript
复制
<?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');

消费脚本:

代码语言:javascript
复制
<?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();

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

这是一个基本的例子,而且enqueue还有很多其他可能会派上用场的特性。如果您感兴趣,请查看enqueue documentation

票数 10
EN

Stack Overflow用户

发布于 2012-07-06 14:51:59

你可以使用像Zero MQ这样的东西

参见Example by Rasmus Lerdorf

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

票数 9
EN

Stack Overflow用户

发布于 2012-07-06 14:50:30

看看this吧。

它使用memcached实现持久性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11357187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档