RabbitMQ-消息队列之routing使用

news/2024/9/23 22:38:45/

1、安装rabbitmq

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

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

mkdir vendor

3、进入文件

cd vendor

4、安装php扩展

composer require php-amqplib/php-amqplib

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

cd ../
mkdir routing

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

cd routing
touch publish.php

7、输入routing生产者内容

<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;$v_host = 'order';$exc_name ='direct_log';$routing_key = 'warn';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',false,false,false);$data = 'this is '.$routing_key.' 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 error.php
touch info.php
touch warn.php

9、输入routing消费者内容

vi error.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'direct_log';$routing_key = 'error';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',false,false,false);list($queue_name,,) = $channel->queue_declare('',false,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();
vi info.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'direct_log';$routing_key = 'info';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',false,false,false);list($queue_name,,) = $channel->queue_declare('',false,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();
vi warn.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'direct_log';$routing_key = 'warn';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',false,false,false);list($queue_name,,) = $channel->queue_declare('',false,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 error.php
php info.php
php warn.php

11、执行生产者

php publish.php
此时你会发现只有warn.php对应的消费者才有数据,如果你把publish.php生产者里面的$routing_key对应的值改成error,你会发现只有error.php对应的消费者才有数据。这就是rabbitmq routing工作模式硬实力

http://www.ppmy.cn/news/1511374.html

相关文章

Linux使用技巧(一) - SCP 传输文件

简介 scp&#xff08;Secure Copy Protocol&#xff09;是 Linux 和 Unix 系统中用于在本地和远程之间安全地传输文件的工具。它基于 SSH&#xff08;Secure Shell&#xff09;协议进行文件传输&#xff0c;从而确保数据在传输过程中的安全性和完整性。scp 命令的基本语法如下…

【nginx】nginx的核心模块配置

Nginx 账户认证功能 由 ngx_http_auth_basic_module 模块提供此功能 [rootNginx ~]# htpasswd -cmb /usr/local/nginx/conf/.htpasswd admin lee #-b 表 示非交互建立用户认证 Adding password for user admin [rootNginx ~]# htpasswd -mb /usr/local/nginx/conf/.htpasswd…

vue3 响应式 API:ref() 和 reactive()

在 Vue 3 中&#xff0c;响应式系统是其核心特性之一&#xff0c;它使得数据的变化能够自动触发视图的更新。 官方文档&#xff1a; 响应式 API&#xff1a;核心 要更好地了解响应式 API&#xff0c;推荐阅读官方指南中的章节&#xff1a; 响应式基础 (with the API preference…

探索CSS的:placeholder-shown伪类:增强表单输入体验

在现代网页设计中&#xff0c;CSS提供了强大的工具来增强用户界面的交互性和美观性。其中&#xff0c;CSS伪类:placeholder-shown是一个相对较新的特性&#xff0c;它允许开发者根据输入字段是否显示占位符文本来应用不同的样式。这不仅可以提升表单的可访问性&#xff0c;还可…

井盖异动传感器:为城市安全加码

城市的地下管网错综复杂&#xff0c;井盖作为连接地面与地下的重要通道&#xff0c;其安全性至关重要。然而&#xff0c;由于各种原因导致的井盖丢失或损坏事件时有发生&#xff0c;给行人和车辆带来了极大的安全隐患。 一、智能科技&#xff0c;守护脚下安全 旭华智能井盖异…

第37讲:Cephfs文件系统的正确使用姿势

文章目录 1.Cephfs文件系统简介2.Cephfs文件系统细节介绍2.1.Cephfs文件系统多客户端隔离挂载2.2.Ceph集群中多个Cephfs如何单独使用 3.挂载多个Cephfs文件系统4.Cephfs文件系统多客户端隔离挂载实战4.1.创建一个Cephfs文件系统4.2.将Cephfs文件系统挂载到本地路径4.3.在Cephfs…

手动修改zk类型的kafka offset

手动修改zk类型的 offset: 连接到ZooKeeper ./zkCli.sh -server ..123:2181,.…87.124:2181,1*.*.87.125:2181 查找并修改ae_spark这个topic的消费者组的offset值 对于每个分区&#xff08;0、1、2&#xff09;&#xff0c;需要分别查看和修改offset值 查看和修改分区0的offs…

Spring——bean的基础配置以及四个实例化方法

一、Bean的基础配置包含Bean的别名&#xff08;name&#xff09;以及作用范围的配置&#xff08;scope&#xff09; 二、四个实例化方法包括构造方法实例化Bean、静态工厂、实例工厂、实现FactoryBean接口 如果我们想要得到容器中的Bean时使用别名那么我们在Spring配置Bean标签…