Link Search Menu Expand Document

支持Enqueue

Enqueue 是一个 MIT 许可的开源项目,它的持续开发完全得益于社区和我们客户的支持。如果您想加入他们,请考虑:


Redis 传输

本传输使用Redis作为消息代理。 它将在那里创建一个集合(队列或主题)。将消息推送到集合的尾部并从头部弹出。 本传输可以运行于 phpredis PHP扩展或predis库。 确保您安装了其中任何一个。

特性:

  • 使用 DSN 字符串配置
  • 开箱即用的延迟策略
  • Recovery&Redelivery support恢复和重新交付支持
  • 限期支持
  • 延迟支持
  • 可与其他队列互操作实现互换
  • 支持订阅消费者

目录:

安装

  • 使用 php redis 扩展:
$ apt-get install php-redis
$ composer require enqueue/redis
  • 使用 predis 库:
$ composer require enqueue/redis predis/predis:^1

创建上下文

  • 使用 php redis 扩展:
<?php
use Enqueue\Redis\RedisConnectionFactory;

// 连接到localhost
$factory = new RedisConnectionFactory();

// 同上
$factory = new RedisConnectionFactory('redis:');

// 同上
$factory = new RedisConnectionFactory([]);

// connect to Redis at example.com port 1000 using phpredis extension
$factory = new RedisConnectionFactory([
    'host' => 'example.com',
    'port' => 1000,
    'scheme_extensions' => ['phpredis'],
]);

// 同上,但是使用了DSN字符串。
$factory = new RedisConnectionFactory('redis+phpredis://example.com:1000');

$context = $factory->createContext();

// 如果已安装了 enqueue/enqueue 库,则可以使用工厂从DSN构建上下文。
$context = (new \Enqueue\ConnectionFactoryFactory())->create('redis:')->createContext();

// pass redis instance directly
$redis = new \Enqueue\Redis\PhpRedis([ /** redis connection options */ ]);
$redis->connect();

// Secure\TLS connection. Works only with predis library. Note second "S" in scheme.
$factory = new RedisConnectionFactory('rediss+predis://user:pass@host/0');

$factory = new RedisConnectionFactory($redis);
  • 使用 predis 库:
<?php
use Enqueue\Redis\RedisConnectionFactory;

$connectionFactory = new RedisConnectionFactory([
    'host' => 'localhost',
    'port' => 6379,
    'scheme_extensions' => ['predis'],
]);

$context = $connectionFactory->createContext();
  • 使用 predis 和自定义选项:

它可以使您更好地控制供应商的特定功能。

<?php
use Enqueue\Redis\RedisConnectionFactory;
use Enqueue\Redis\PRedis;

$config = [
    'host' => 'localhost',
    'port' => 6379,
    'predis_options' => [
        'prefix'  => 'ns:'
    ]
];

$redis = new PRedis($config);

$factory = new RedisConnectionFactory($redis);

发送消息到主题

<?php
/** @var \Enqueue\Redis\RedisContext $context */

$fooTopic = $context->createTopic('aTopic');
$message = $context->createMessage('Hello world!');

$context->createProducer()->send($fooTopic, $message);

发送消息到队列

<?php
/** @var \Enqueue\Redis\RedisContext $context */

$fooQueue = $context->createQueue('aQueue');
$message = $context->createMessage('Hello world!');

$context->createProducer()->send($fooQueue, $message);

发送限期消息

<?php
/** @var \Enqueue\Redis\RedisContext $context */
/** @var \Enqueue\Redis\RedisDestination $fooQueue */

$message = $context->createMessage('Hello world!');

$context->createProducer()
    ->setTimeToLive(60000) // 60秒
    ->send($fooQueue, $message)
;

发送延迟消息

<?php
/** @var \Enqueue\Redis\RedisContext $context */
/** @var \Enqueue\Redis\RedisDestination $fooQueue */

$message = $context->createMessage('Hello world!');

$context->createProducer()
    ->setDeliveryDelay(5000) // 5秒
    ->send($fooQueue, $message)
;

消费消息:

<?php
/** @var \Enqueue\Redis\RedisContext $context */

$fooQueue = $context->createQueue('aQueue');
$consumer = $context->createConsumer($fooQueue);

$message = $consumer->receive();

// 处理消息

$consumer->acknowledge($message);
//$consumer->reject($message);

删除队列(清除消息):

<?php
/** @var \Enqueue\Redis\RedisContext $context */

$fooQueue = $context->createQueue('aQueue');

$context->deleteQueue($fooQueue);

删除主题(清除消息):

<?php
/** @var \Enqueue\Redis\RedisContext $context */

$fooTopic = $context->createTopic('aTopic');

$context->deleteTopic($fooTopic);

连接 Heroku Redis

Heroku Redis描述了如何在 Heroku 上设置 Redis 实例。 要将它与 Enqueue Redis 一起使用,您必须将 REDIS_URL 传递给 RedisConnectionFactory 构造函数。

<?php

// REDIS_URL: redis://h:asdfqwer1234asdf@ec2-111-1-1-1.compute-1.amazonaws.com:111

$connection = new \Enqueue\Redis\RedisConnectionFactory(getenv('REDIS_URL'));

返回首页