dspacelabs / queue
PHP通用的抽象队列库,支持多种不同的队列系统
Requires
- psr/log: ^1.0
Requires (Dev)
- aws/aws-sdk-php: ^3.24
- mockery/mockery: ^0.9
- monolog/monolog: ^1.23
- phing/phing: ^2.15
- php-amqplib/php-amqplib: ^2.7
- phpunit/phpunit: ~4.8
- predis/predis: ^1.1
Suggests
- aws/aws-sdk-php: Required to use SQS Queues
- monolog/monolog: To enabled logging
- php-amqplib/php-amqplib: Required for RabbitMQ
- predis/predis: Required to use with Redis Queues
This package is not auto-updated.
Last update: 2020-06-02 23:01:27 UTC
README
PHP通用的队列库,支持多种不同的队列系统。
更多文档,请参阅 wiki。
安装
composer require dspacelabs/queue
使用方法
<?php use Dspacelabs\Component\Queue\Message; // Publishing messages to a queue $message = new Message($body); $queue->publish($message); /** * This will publish a message to the queue you created, the $body can be * anything you want. */ // Receive messages $message = $queue->receive(); $body = $message->getBody(); // ... Process Data ... /** * $message will be the message that was published. `->receive()` can be put * into a foreach loop if you want to continue to process the queue until * all the messages are processed, use a for loop in you only want to process * a small number of the messages */ /** * Once you are done processing a message, it needs to be deleted from the queue */ $queue->delete($message);
消息、队列、代理
消息被发布到队列中。当你从队列接收到消息时,你将与此类交互。
队列是你发布消息的地方。例如,一个队列可以是AWS SQS、RabbitMQ或其他你所能想到的任何队列。
代理帮助你跟踪队列。因此,你不必在各个地方都有100个不同的队列对象,你只需将它们全部添加到代理中,让代理处理它们。你只需要你需要的那些。
使用FileQueue
FileQueue会将消息存储在磁盘上,适用于本地开发。
消息以“name.timestamp.message”的文件命名格式存储在磁盘上,因此你可以有多个文件队列共享同一目录。
<?php use Dspacelabs\Component\Queue\FileQueue; use Dspacelabs\Component\Queue\Message; $queue = new FileQueue('queue.name', '/tmp/'); $queue->publish(new Message('Hello World!')); // ... $message = $queue->receive(); $body = $message->getBody(); // $body === "Hello World!" $queue->delete($message);
使用SqsQueue
需要Amazon PHP SDK。
php composer.phar require aws/aws-sdk-php
<?php use Aws\Credentials\Credentials; use Aws\Sqs\SqsClient; use Dspacelabs\Component\Queue\SqsQueue; $credentials = new Credentials($accessKey, $secretKey); $client = new SqsClient([ 'version' => 'latest', 'region' => 'us-east-1', 'credentials' => $credentials, ]); $queue = new SqsQueue($client, $queueUrl, $name);
使用StandardQueue
标准队列主要用于测试。一旦设置好,你可以快速测试你的工作流程。请注意,这有一些缺点,主要是消息不持久化。
<?php // First you need to setup the Queue $queue = new \Dspacelabs\Component\Queue\StandardQueue('queue.name'); // Create a message that will be sent to the queue $message = new \Dspacelabs\Component\Queue\Message('Hello World A'); // Publish the message $queue->publish($message); // Consume all messages /** @var Message $msg **/ while ($msg = $queue->receive()) { // process message // ... // Delete the Message from the queu $queue->delete($msg); }
注意:当使用StandardQueue时,你不需要像这个示例中那样删除消息 $queue->delete($msg);
然而,有些队列支持此功能。
使用RedisQueue
要使用RedisQueue
,您需要安装Predis
composer require predis/predis
完成之后,您就可以开始使用Redis作为可能的队列之一了。
<?php use Predis\Client; use Dspacelabs\Component\Queue\RedisQueue; $client = new Client(); $queue = new RedisQueue($client, 'queue.name');
有关Predis的文档,请参阅 https://github.com/nrk/predis。
使用代理
如果您有多个队列,您可以使用代理,它将帮助您管理您拥有的各种队列。例如,您可能在使用多个SQS队列,并希望有一个单一的位置来访问它们。代理将帮助您做到这一点。
重要的是指出,代理支持此库中的所有队列类型。因此,您可以使用SQS队列、标准队列或您自己制作的自定义队列。
<?php use Dspacelabs\Component\Queue\Broker; $broker = new Broker(); // I assume you already have a queue $broker->addQueue($queue); // `queue.name` is the name given to the queue you created // I assume you already have a `$message` created $broker->get('queue.name')->publish($message); $broker->get('queue.other')->publish($messageOther);
变更日志
请参阅 CHANGELOG.md。
许可证
版权所有 (c) 2015-2017 dSpace Labs LLC
完整许可证请参阅 LICENSE。