composer依赖包是官方的php-amqplib/php-amqplib(需打开php的sockets扩展,否则会报错)

第一步 【安装延迟队列插件】:

rabbitMQ默认是没有延迟队列插件的,我们需要手动进行安装。

wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez
cp rabbitmq_delayed_message_exchange-3.9.0.ez /opt/rabbitmq/plugins/
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

第二步 【创建延迟队列生产者】:

<?phprequire_once "../vendor/autoload.php";use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;class SendMessage {protected $rabbitmq_channel;protected $rabbitmq_connection;public function __construct() {$this->rabbitmq_connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$this->rabbitmq_channel = $this->rabbitmq_connection->channel();}/*** 生产延迟队列* @param $msg*/public function sendMessage($msg) {//声明死信交换机$this->rabbitmq_channel->exchange_declare('delayed_exchange','x-delayed-message',false,true,false,false,false,new \PhpAmqpLib\Wire\AMQPTable(['x-delayed-type' => \PhpAmqpLib\Exchange\AMQPExchangeType::FANOUT]));$headers = new \PhpAmqpLib\Wire\AMQPTable(['x-delay' => 7000]);$message = new AMQPMessage($msg, ['delivery_mode' => 2]);$message->set('application_headers', $headers);$this->rabbitmq_channel->basic_publish($message, 'delayed_exchange');$datetime = date('Y/m/d H:i:s');echo "成功发送延迟消息 : {$msg} , {$datetime} \n";}/*** @throws Exception*/public function __destruct(){$this->rabbitmq_channel->close();$this->rabbitmq_connection->close();}
}try {$sendMessage = new SendMessage();$sendMessage->sendMessage("这是一条延迟消息");} catch (\Throwable $e) {echo $e->getMessage();}

第三步 【创建延迟队列消费者】:

<?phprequire_once "../vendor/autoload.php";use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;class ReceiveMessage {protected $rabbitmq_channel;protected $rabbitmq_connection;public function __construct() {$this->rabbitmq_connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$this->rabbitmq_channel = $this->rabbitmq_connection->channel();}/*** 消费延迟队列* @throws ErrorException*/public function receiveMessage() {//声明死信交换机$this->rabbitmq_channel->exchange_declare('delayed_exchange','x-delayed-message',false,true,false,false,false,new \PhpAmqpLib\Wire\AMQPTable(['x-delayed-type' => \PhpAmqpLib\Exchange\AMQPExchangeType::FANOUT]));//声明死信队列$this->rabbitmq_channel->queue_declare('delayed_queue',false,true,false,false,false,new \PhpAmqpLib\Wire\AMQPTable(['x-dead-letter-exchange' => 'delayed']));//绑定队列到交换机$this->rabbitmq_channel->queue_bind('delayed_queue', 'delayed_exchange');echo "正在等待延迟队列消息, waiting... \n";$callback = function (AMQPMessage $message) {//$headers = $message->get('application_headers');//$nativeData = $headers->getNativeData();echo $message->body . '-------' . date('Y/m/d H:i:s') . "\n";$message->ack();};$this->rabbitmq_channel->basic_consume('delayed_queue','',false,false,false,false,$callback);while ($this->rabbitmq_channel->is_consuming()) {$this->rabbitmq_channel->wait();}}
}try {$receiveMessage = new ReceiveMessage();$receiveMessage->receiveMessage();} catch (\Throwable $e) {echo $e->getMessage();}

第四步【测试】:

首先执行消费者进行监听队列

现在执行生产者来发送一条延迟消息

再次回到消费者控制台查看消费情况

由此可见,我们上面生产的延迟消息['x-delay' => 7000](7秒),消费时间则正是7秒后.

php+rabbitMQ操作之延迟队列(延迟插件)相关推荐

  1. docker rabbitmq 安装 延迟队列 rabbitmq_delayed_message_exchange 插件

    以  官方的 rabbitmq:3.9.20-management 为例,默认开启的插件有4个,如下所示 2022-07-09 21:31:55.624125+08:00 [info] <0.8 ...

  2. [MQ] 延迟队列/延迟插件下载

    ✨✨个人主页:沫洺的主页

  3. Rabbitmq超级详细的笔记,包括安装,基本命令,rabbitmq的七种消息模式,以及死信队列,延迟队列,优先级队列和惰性队列的介绍

    RabbitMQ 文章目录 RabbitMQ 1 RabbitMQ介绍 1.1 基本介绍 1.2 RabbitMQ的安装 1.2.1 ubuntu20.04 安装rabbitmq 1.2.2 cent ...

  4. RabbitMQ 延迟队列-对于入门来说可以快速上手

    RabbitMQ 延迟队列-非常非常实用 RabbitMQ 延迟队列-非常非常实用 一.使用场景 二.消息延迟推送的实现 三.项目具体实现 RabbitMQ 延迟队列-非常非常实用 一.使用场景 ​ ...

  5. RabbitMQ 延迟队列,太实用了!

    点击关注公众号,Java干货及时送达 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付 ...

  6. RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)

    应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...

  7. RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列

    搭建SpringBoot项目,用于演示 springboot版本 <!-- spring boot --><dependency><groupId>org.spri ...

  8. php rabbitmq延迟队列示例

    原文:https://blog.csdn.net/qq_26656329/article/details/75502468 Python示例请移步  官方有关于延迟队列的插件,可以更灵活的设置延迟队列 ...

  9. SpringBoot整合RabbitMQ 消息可靠投递、手动ack、延迟队列、死信队列、消息幂等性保障、消息积压

    1.消息可靠投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景.RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式. confirm 确认模式 ...

  10. rabbitmq 消息延迟推送--插件模式

    到此 灵熙云工作室 - 实践出真理 查看全文内容 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在签收商品后,物流系统会在七天后延时发送一个消息给 ...

最新文章

  1. RxJava firstElement 与 lastElement 以及 elementAt
  2. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...
  3. Visual Studio 2008 Samples Page
  4. 利用SMS OSD实现win2008操作系统的部署
  5. 精确分割和筛选音频从长的音频中
  6. 多任务学习有用的资料
  7. 删除指定路径下的文件
  8. 品茗论道说广播(Broadcast内部机制讲解)
  9. 导师 = advisor + supervisor
  10. BZOJ - 2744 朋友圈 (二分图上的最大团)
  11. 0x29——如何把自己iphone app传到iphone上
  12. 通用业务平台设计(一):概览
  13. QtCreator 编译时提示 warning C4819 的解决办法
  14. linux 学习 vi简介; vi下三种工作方式。
  15. (转)听赌徒谈风险:没犯任何错误照样输个精光
  16. Ubuntu 16.04 安装搜狗输入法
  17. c 语言中析构函数,详解C++编程中的析构函数
  18. android代码判断当前手机的手机号码是属于移动、联通、还是电信的
  19. 罗技的鼠标驱动试用感受
  20. NODEJS day_04(5.24)Express-2

热门文章

  1. catalina java opts,catalina.bat中适当的位置设置JAVA_OPTS
  2. Zookeeper的事务--Transaction
  3. Selenium简单的163邮箱登录实例
  4. xmpp怎么让群主踢人?
  5. python数学符号读法大全_数学符号及读法大全
  6. 华为交换机CPU处理报文原理
  7. TeamViewer三种许可证的区别是什么?
  8. 大数据:对大数据的理解
  9. python实现华氏温度和摄氏温度转换
  10. 明星造型师Tara Swennen和Glamhive创始人Stephanie Sprangers再次汇聚全球造型、时尚、美妆和女性赋权领域“大咖”参加突破性数字盛会