tp6 实现 RabbitMq 延迟队列

1、安装 延迟队列消息插件

RabbitMq官网 下载插件

tp6 实现 RabbitMq 延迟队列_第1张图片

github下载地址

tp6 实现 RabbitMq 延迟队列_第2张图片

2、将下载好的插件放到 RabbitMq 插件目录

tp6 实现 RabbitMq 延迟队列_第3张图片

备注:centos7 插件目录 

/usr/lib/rabbitmq/lib/rabbitmq_server-3.9.14/plugins

3、安装插件

 执行如下命令:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

tp6 实现 RabbitMq 延迟队列_第4张图片

查看是否安装成功:

rabbitmq-plugins list

 tp6 实现 RabbitMq 延迟队列_第5张图片

插件列表出现延迟队列的插件即安装成功。

4、在web管理页面添加延迟交换机类型

tp6 实现 RabbitMq 延迟队列_第6张图片

 5、发送延迟消息的主要代码:

    /**
     * 发送延迟消息
     * @param array $data 发送的数据
     * @param int $time 延迟的时间,单位秒
     */
    public function sendDelayMsg(array $data, int $time = 5)
    {
        $delayConfig = [
            'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
            'application_headers' => new AMQPTable(['x-delay' => $time * 1000])
        ];
        // 将要发送数据变为json字符串
        $messageBody = json_encode($data, JSON_UNESCAPED_UNICODE);
        $message = new AMQPMessage($messageBody, $delayConfig);
        // 发送消息
        $this->channel->basic_publish($message, $this->queueConfig['exchange_name'], $this->routeKey);

        // 关闭连接
        $this->stop();
    }

测试代码
 

    // 延迟处理
    public function delayMsg()
    {
        $producer = new Producer('delay_queue');
        $data = [
            'message_type' => 2,
            'order_id' => 3,
            'user_id' => 3,
            'message' => "发送的消息内容:您的快递已到的配送站。"
        ];
        $producer->sendDelayMsg($data, 60);

        dump("发布成功");
    }

你可能感兴趣的:(PHP,rabbitmq,rabbitmq,分布式)