当前位置: 首页 > news >正文

RabbitMQ-消息队列延迟队列一

1、安装rabbitmq

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

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

mkdir vendor

3、进入文件

cd vendor

4、安装php扩展

composer require php-amqplib/php-amqplib

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

cd ../
mkdir dead

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

cd dead
touch dead_pub.php

7、输入dead生产者内容

<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
use PhpAmqpLib\Wire\AMQPTable;$v_host = 'order';$exc_name ='exc_pay';
$routing_key = 'route_pay';
$queue_name = 'queue_pay';
$ttl = 20000;$dead_exc_name = 'dead_exc_pay';
$dead_routing_key = 'dead_route_pay';
$dead_queue_name = 'dead_queue_pay';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',false,false,false);$args = new AMQPTable(['x-message-ttl'=>$ttl,'x-dead-letter-exchange'=>$dead_exc_name,'x-dead-letter-routing-key'=>$dead_routing_key]);$channel->queue_declare($queue_name,false,true,false,false,false,$args);$channel->queue_bind($queue_name,$exc_name,$routing_key);//声明死信交换器  队列$channel->exchange_declare($dead_exc_name,'direct',false,false,false);$channel->queue_declare($dead_queue_name,false,true,false,false);$channel->queue_bind($dead_queue_name,$dead_exc_name ,$dead_routing_key);$data = 'this is dead message';$msg = new AMQPMessage($data,['delivery_mode'=>AMQPMEssage::DELIVERY_MODE_PERSISTENT]);$channel->basic_publish($msg,$exc_name,$routing_key);$channel->close();$connection->close();

8、创建消费者php

touch dead_worker.php

9、输入dead消费者内容

<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$dead_exc_name = 'dead_exc_pay';
$dead_routing_key = 'dead_route_pay';
$dead_queue_name = 'dead_queue_pay';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($dead_exc_name,'direct',false,false,false);$channel->queue_bind($dead_queue_name,$dead_exc_name,$dead_routing_key);$callback = function($msg){echo 'received ' ,$msg->body,"\n";$msg->ack();
};$channel->basic_qos(null,1,null);$channel->basic_consume($dead_queue_name,'',false,false,false,false,$callback);while($channel->is_open()){$channel->wait();
}$channel->close();$connection->close();

10、执行消费者

php dead_worker.php

11、执行生产者

php dead_pub.php
此时你会发现只有dead消费者并没有数据,而是退后2秒才有数据。这就是rabbitmq dead延迟队列工作模式硬实力
http://www.lryc.cn/news/427567.html

相关文章:

  • JavaScript中普通对象和Map对象的区别
  • Liunx搭建Rustdesk远程桌面服务
  • antv X6--实现节点旁添加多个text标签
  • JAVA--多线程
  • ADB-DROM
  • mysql 之 explain
  • CentOS迁移案例 | 保障轨道交通安全、发挥基础设施效能,麒麟信安操作系统支撑某市轨道交通畅行无忧
  • 获取操作系统的信息(Go语言)
  • 【论文阅读】HuatuoGPT-II, One-stage Training for Medical Adaption of LLMs
  • Excel表列序号
  • IOS 03 纯代码封装自定义View控件
  • 比较结构加法及其逆运算
  • 44.【C语言】指针(重难点)(G)
  • 746. 使用最小花费爬楼梯-dp3
  • MPU6050详细介绍
  • 【分享】Excel的3个隐藏功能
  • Linux中的chown指令
  • UCOSIII内存管理机制详解
  • Android12 显示框架之Transaction----client端
  • 在Windows上使用FRP搭建内网穿透:
  • TypeError: Cannot read properties of undefined (reading ‘scrollIntoView‘)(已解决)
  • 【解决】Unity Inspector 视窗脚本中文乱码问题
  • 使用 C/C++访问 MySQL
  • Linux 网络套接字解析:实现网络通信
  • vue3 组合式API
  • 二、什么是Vue中的响应式?Vue的响应式原理
  • 快9月了才开始强化,跟张宇还是武忠祥?
  • SSM好易学学习平台---附源码92142
  • 对于mp4 ios和mac safari不能播放问题处理
  • 开发同城交友找搭子系统app前景分析