使用场景:1.限流 2.确保消息数据可靠性的 3.逻辑解耦
rabbitMQ运行的语言erl需要先安装erl环境
进入erl包地址选择自己系统的版本下载rabbitmq/erlang - Packages · packagecloud
查看系统 uname -a
执行者三步,
我的因为linux无法下载到rpm所以在widows直接访问https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.10-1.el7.x86_64.rpm/download.rpm
下载后 上传.rpm到linux 服务器上
执行 sudo yum install erlang-23.3.4.10-1.el7.x86_64.rpm
输入erl就可以验证是否安装成功
(1)安装包:rabbitmq/rabbitmq-server - Packages · packagecloud
选择自己系统的版本
(2) 执行
rabbitmq-plugins enable rabbitmq_management //启动 rabbitmq 的插件管理。
systemctl start rabbitmq-server //开启服务
(3) 开放端口 15672、5672 访问 http://ip:15672管理后台
(4) rabbitqm类似与mysql 同是一个应用. 需要创建用户名密码 然后连接使用
1.创建用户名
rabbitmqctl add_user admin 123456
2. 添加 admin 用户为administrator角色
rabbitmqctl set_user_tags admin administrator
3.设置 admin 用户的权限,指定允许访问的vhost以及write/read
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
php使用 AMQP (Advanced Message Queuing Protocol) 需要安装 windows下安装amqp扩展 linux 下安装php中如何安装amqp扩展 - 编程语言 - 亿速云
先查看自己的php版本 ,
解压:
(1)php_amqp.dll 和php_amqp.pdb复制到php的 ext文件夹目录D:\wamp64\bin\php\php7.2.10\ext
(2)rabbitmq.4.dll和rabbitmq.4.pdb 复制到php根目录D:\wamp64\bin\php\php7.2.10
(3) PHP.ini里面添加 extension=PHP_amqp.dll
(4)apache 修改http.conf 文件 添加 Loadfile "D:/XAMPP/PHP/rabbitmq.4.dll" 之后重启apache
consumer.php
//+--------------------------------
//项目名称:yfcms - consumer.php
//创建时间:2022-06-16 10:48
//创建人 :LGT
//------------------------------------
/*
* 消费者
* */
$config = [
'host' => '47.xx.xx.195',
'vhost' => '/',
'port' => 5672,
'login' => 'admin',
'password' => '123456'
];
//连续rabbitmq服务器
$cnm = new AMQPConnection($config);
if(!$cnm->connect()){
echo '连接失败';
die();
}
//在连接内创建一个通道
$ch = new AMQPChannel($cnm);
//创建交换机
$ex = new AMQPExchange($ch);
//申明路由键
$routingKey = 'key_1';
//设置交换机名称
$ex->setName('exchange_1');
//设置交换机类型
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机持久
$ex->setFlags(AMQP_DURABLE);
//申明交换机
$ex->declareExchange();
/************************************设置消息队列*/
//创建消息队列
$q = new AMQPQueue($ch);
//设置队列名称
$q->setName('q_1');
//队列持久性
$q->setFlags(AMQP_DURABLE);
//申明消息队列
$q->declareQueue();
//绑定交换机 $routingKey交换机的建名
$q->bind($ex->getName(),$routingKey);
//监听
$q ->consume('receive');
//监听处理方法
function receive($enverlope,$queue){
echo $enverlope->getBody().'\n'; //生产者给消费者的消息
}
publisher.php
//+--------------------------------
//项目名称:yfcms - publisher.php
//创建时间:2022-06-16 15:12
//创建人 :LGT
//------------------------------------
/*
* 生产者_ 面对用户
* */
$config = [
'host' => '47.xx.xx.195',
'vhost' => '/',
'port' => 5672,
'login' => 'admin',
'password' => '123456'
];
//连续rabbitmq服务器
$cnm = new AMQPConnection($config);
if (!$cnm->connect()) {
echo '连接失败';
die();
}
//在连接内创建一个通道
$ch = new AMQPChannel($cnm);
//创建交换机
$ex = new AMQPExchange($ch);
//申明路由键
$routingKey = 'key_1';
//设置交换机名称
$ex->setName('exchange_1');
//设置交换机类型
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机持久
$ex->setFlags(AMQP_DURABLE);
//申明交换机
$ex->declareExchange();
/************************************推送消息*/
for ($i=0;$i<2;$i++){
$msg = [
'data'=>'message_'.$i
];
$ex->publish(json_encode($msg),$routingKey,AMQP_NOPARAM,['delivery_mode'=>2]);
}
rabbitQm: ack comfirm机制. 确保百分百发送成功机制, return机制,限流机制 重回队列机制,
rabbitQm:git上demo GitHub - php-amqplib/php-amqplib: The most widely used PHP client for RabbitMQ
解决的: 数据投递,非阻塞操作或推送通知,或许你想要实现发布/订阅,异步处理,或者工作队列。所有这些都可以通过消息系统实现。
RabbitMQ是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。