RabbitMQ-消息队列延迟队列二

1、安装rabbitmq

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

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

复制代码
mkdir vendor

3、进入文件

复制代码
cd vendor

4、安装php扩展

复制代码
composer require php-amqplib/php-amqplib

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

复制代码
cd ../
mkdir delay

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

复制代码
cd delay
touch delay_pub.php

7、输入delay生产者内容

复制代码
<?php

require_once  '../vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
use PhpAmqpLib\Wire\AMQPTable;

$v_host = 'order';

$exc_name ='delay_exc_pay';
$routing_key = 'delay_route_pay';
$queue_name = 'delay_queue_pay';
$ttl = 20000;
$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);

$channel = $connection->channel();

$channel->exchange_declare($exc_name,'x-delayed-message',false,true,false);

$args = new AMQPTable(['x-delayed-type'=>'direct']);

$channel->queue_declare($queue_name,false,true,false,false,false,$args);

$channel->queue_bind($queue_name,$exc_name,$routing_key);
$data = 'this is dead message';

$arr = ['delivery_mode'=>AMQPMEssage::DELIVERY_MODE_PERSISTENT,'application_headers'=>new AMQPTable(['x-delay'=>$ttl])];

$msg = new AMQPMessage($data,$arr);

$channel->basic_publish($msg,$exc_name,$routing_key);

$channel->close();

$connection->close();

8、创建消费者php

复制代码
touch delay_worker.php

9、输入delay消费者内容

复制代码
<?php

require_once  '../vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;

$v_host ='order';

$exc_name ='delay_exc_pay';
$routing_key = 'delay_route_pay';
$queue_name = 'delay_queue_pay';

$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);

$channel = $connection->channel();

$channel->exchange_declare($exc_name,'x-delayed-message',false,true,false);


$channel->queue_bind($queue_name,$exc_name,$routing_key);

$callback = function($msg){
	echo 'received ' ,$msg->body,"\n";
	$msg->ack();
};

$channel->basic_qos(null,1,null);

$channel->basic_consume($queue_name,'',false,false,false,false,$callback);

while($channel->is_open()){
	$channel->wait();
}

$channel->close();

$connection->close();

10、执行消费者

复制代码
php delay_worker.php

11、执行生产者

复制代码
php delay_pub.php
此时你会发现只有delay消费者并没有数据,而是退后2秒才有数据。这就是rabbitmq delay延迟队列工作模式硬实力
延迟队列需要提前添加交换机
相关推荐
北京中科新远科技5 小时前
高速光模块上线验收实战:DOM、FEC、BER与端口计数器怎么一起看
服务器·网络·php
微三云 - 廖会灵 (私域系统开发)8 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
她说可以呀9 小时前
Docker 镜像的两种创建方式
java·分布式·docker
LZ_66610 小时前
php代码执行3(难)
php
盛世宏博北京12 小时前
十二防档案库房总线架构设计:恒湿消毒净化一体机 RS485 组网实战笔记
开发语言·笔记·php·恒湿机·档案八防温湿度
无风听海14 小时前
深入理解.NET中的 Lazy<T>
服务器·php·.net
杭州领祺科技14 小时前
分布式光伏『四可』接入改造:绿电直连场景下的二次系统通信与安全架构(27 号令 4 区落位 + 7 产品边界)
分布式·安全·安全架构·光伏·电力·绿电直连·二次系统
Evelvnk15 小时前
计算机学习资料
开发语言·人工智能·计算机·php
迪康coolmu15 小时前
迪康Defender网络准入控制系统落地实战:部署、配置与问题排查记录
运维·开发语言·网络·经验分享·php