当前位置:   article > 正文

RabbitMQ-消息队列延迟队列一

RabbitMQ-消息队列延迟队列一

1、安装rabbitmq

怎么安装rabbitmq请查看之前课程,如果已经安装,请略过此步。

2、创建vendor文件夹或是直接采用PHP框架

mkdir vendor

3、进入文件

cd vendor

4、安装php扩展

composer require php-amqplib/php-amqplib

5、进入上级创建dead文件夹

  1. cd ../
  2. mkdir dead

6、进入dead文件并创建生产者php

  1. cd dead
  2. touch dead_pub.php

7、输入dead生产者内容

  1. <?php
  2. require_once '../vendor/autoload.php';
  3. use PhpAmqpLib\Connection\AMQPStreamConnection;
  4. use PhpAmqpLib\Message\AMQPMessage;
  5. use PhpAmqpLib\Wire\AMQPTable;
  6. $v_host = 'order';
  7. $exc_name ='exc_pay';
  8. $routing_key = 'route_pay';
  9. $queue_name = 'queue_pay';
  10. $ttl = 20000;
  11. $dead_exc_name = 'dead_exc_pay';
  12. $dead_routing_key = 'dead_route_pay';
  13. $dead_queue_name = 'dead_queue_pay';
  14. $connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);
  15. $channel = $connection->channel();
  16. $channel->exchange_declare($exc_name,'direct',false,false,false);
  17. $args = new AMQPTable(['x-message-ttl'=>$ttl,'x-dead-letter-exchange'=>$dead_exc_name,'x-dead-letter-routing-key'=>$dead_routing_key]);
  18. $channel->queue_declare($queue_name,false,true,false,false,false,$args);
  19. $channel->queue_bind($queue_name,$exc_name,$routing_key);
  20. //声明死信交换器 队列
  21. $channel->exchange_declare($dead_exc_name,'direct',false,false,false);
  22. $channel->queue_declare($dead_queue_name,false,true,false,false);
  23. $channel->queue_bind($dead_queue_name,$dead_exc_name ,$dead_routing_key);
  24. $data = 'this is dead message';
  25. $msg = new AMQPMessage($data,['delivery_mode'=>AMQPMEssage::DELIVERY_MODE_PERSISTENT]);
  26. $channel->basic_publish($msg,$exc_name,$routing_key);
  27. $channel->close();
  28. $connection->close();

8、创建消费者php

touch dead_worker.php

9、输入dead消费者内容

  1. <?php
  2. require_once '../vendor/autoload.php';
  3. use PhpAmqpLib\Connection\AMQPStreamConnection;
  4. $v_host ='order';
  5. $dead_exc_name = 'dead_exc_pay';
  6. $dead_routing_key = 'dead_route_pay';
  7. $dead_queue_name = 'dead_queue_pay';
  8. $connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);
  9. $channel = $connection->channel();
  10. $channel->exchange_declare($dead_exc_name,'direct',false,false,false);
  11. $channel->queue_bind($dead_queue_name,$dead_exc_name,$dead_routing_key);
  12. $callback = function($msg){
  13. echo 'received ' ,$msg->body,"\n";
  14. $msg->ack();
  15. };
  16. $channel->basic_qos(null,1,null);
  17. $channel->basic_consume($dead_queue_name,'',false,false,false,false,$callback);
  18. while($channel->is_open()){
  19. $channel->wait();
  20. }
  21. $channel->close();
  22. $connection->close();

10、执行消费者

php dead_worker.php

11、执行生产者

php dead_pub.php
此时你会发现只有dead消费者并没有数据,而是退后2秒才有数据。这就是rabbitmq dead延迟队列工作模式硬实力
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/1018962
推荐阅读
相关标签
  

闽ICP备14008679号