加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何使用PHP的RabbitMQ延迟消息队列?

发布时间:2020-12-13 21:54:29 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试从 PHP使用 Delayed Message Queue for RabbitMQ,但我的消息正在消失. 我用以下代码声明交换: $this-channel-exchange_declare( 'delay','x-delayed-message',false,/* passive,create if exchange doesn't exist */ true,/* durable,persist thr
我正在尝试从 PHP使用 Delayed Message Queue for RabbitMQ,但我的消息正在消失.

我用以下代码声明交换:

$this->channel->exchange_declare(
    'delay','x-delayed-message',false,/* passive,create if exchange doesn't exist */
    true,/* durable,persist through server reboots */
    false,/* autodelete */
    false,/* internal */
    false,/* nowait */
    ['x-delayed-type' => ['S','direct']]);

我用这段代码绑定队列:

$this->channel->queue_declare(
    $queueName,/* Passive */
    true,/* Durable */
    false,/* Exclusive */
    false   /* Auto Delete */
);
$this->channel->queue_bind($queueName,"delay",$queueName);

我正在使用以下代码发布消息:

$msg = new AMQPMessage(json_encode($msgData),[
    'delivery_mode' => 2,'x-delay' => 5000]);
$this->channel->basic_publish($msg,'delay',$queueName);

但消息不会延迟;它仍然立即交付.我错过了什么?

解决方法

从 here,

消息创建应该是

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLibMessageAMQPMessage;
use PhpAmqpLibWireAMQPTable;

$msg = new AMQPMessage($data,array(
                'delivery_mode' => 2,# make message persistent
                'application_headers' => new AMQPTable([
                    'x-delay' => 5000
                ])
            )
        );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读