php使用RabbitMQ,学习了解

1、MQ的基本概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、RabbitMQ的安装和配置

RabbitMq官网地址:http://www.rabbitmq.com/

安装所需要的三个包,百度网盘下载链接:
https://pan.baidu.com/s/1-AD8NrZa2N9JO6yTR1h3Yg
提取码:7ccy

# 上传三个软件包到/opt/
erlang-22.3.4.3-1.el7.x86_64.rpm	
rabbitmq-server-3.8.11-1.el7.noarch.rpm		
socat-1.7.3.2-2.el7.x86_64.rpm
# 安装依赖环境
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
# 执行安装命令
rpm -ivh erlang-22.3.4.3-1.el7.x86_64.rpm
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.8.11-1.el7.noarch.rpm
# 安装管理界面
rabbitmq-plugins enable rabbitmq_management
# 服务器开放端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service 或 firewall-cmd --reload
# 最后如下图,默认登陆账号密码都是:guest

# 添加并编辑配置
vim /etc/rabbitmq/rabbitmq.config
# 加入下面配置代码,注意后面有个点,guest不是必要的,可以去掉
[{
    
    rabbit, [{
    
    loopback_users, [guest]}]}].
# 重启rabbitmq服务,重新登录即可
systemctl restart rabbitmq-server.service 或 systemctl restart rabbitmq-server

# rabbitmq安装路径
cd /usr/share/doc/rabbitmq-server-3.8.11/

在这里插入图片描述
在这里插入图片描述

RabbitMQ常用命令

# 添加用户
rabbitmqctl add_user <username> <password>  

# 删除用户
rabbitmqctl delete_user <username>  

# 修改用户密码
rabbitmqctl change_password <username> <newpassword>  

# 清除用户密码(该用户将不能使用密码登陆,但是可以通过SASL登陆如果配置了SASL认证)
rabbitmqctl clear_password <username> 

# 设置用户tags(相当于角色,包含administrator,monitoring,policymaker,management)
rabbitmqctl set_user_tags <username> <tag>

# 列出所有用户
rabbitmqctl list_users  

# 创建一个vhosts
rabbitmqctl add_vhost <vhostpath>  

# 删除一个vhosts
rabbitmqctl delete_vhost <vhostpath>  

# 列出vhosts
rabbitmqctl list_vhosts [<vhostinfoitem> ...]  

# 针对一个vhosts给用户赋予相关权限;
rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read>  

# 清除一个用户对vhosts的权限;
rabbitmqctl clear_permissions [-p <vhostpath>] <username>  

# 列出哪些用户可以访问该vhosts;
rabbitmqctl list_permissions [-p <vhostpath>]   

# 列出用户访问权限;
rabbitmqctl list_user_permissions <username>

添加用户,分配虚拟机权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、RabbitMQ快速入门

php想使用RabbitMQ的话,需要安装扩展,参考我的文章:
https://blog.csdn.net/cxhblog/article/details/114370062

提示:先执行consumer.php(消费者)产生队列,然后关掉consumer.php(消费者),再执行publisher.php(生产者),再执行consumer.php(消费者)

消费者代码consumer.php

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2021/3/4 0004
 * Time: 21:32
 */
//声明连接参数
$config = array(
    'host' => '127.0.0.1',
    'vhost' => '/',
    'port' => 5672,
    'login' => 'guest',
    'password' => 'guest'
);
//连接broker
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    
    
    echo "Cannot connect to the broker";
    exit();
}
//在连接内创建一个通道
$ch = new AMQPChannel($cnn);
//创建一个交换机
$ex = new AMQPExchange($ch);
//声明路由键
$routingKey = 'key_1';
//声明交换机名称
$exchangeName = 'exchange_1';
//设置交换机名称
$ex->setName($exchangeName);
//设置交换机类型
//AMQP_EX_TYPE_DIRECT:直连交换机
//AMQP_EX_TYPE_FANOUT:扇形交换机
//AMQP_EX_TYPE_HEADERS:头交换机
//AMQP_EX_TYPE_TOPIC:主题交换机
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机持久
$ex->setFlags(AMQP_DURABLE);
//声明交换机
$ex->declareExchange();
//创建一个消息队列
$q = new AMQPQueue($ch);
//设置队列名称
$q->setName('queue_1');
//设置队列持久
$q->setFlags(AMQP_DURABLE);
//声明消息队列
$q->declareQueue();
//交换机和队列通过$routingKey进行绑定
$q->bind($ex->getName(), $routingKey);
//接收消息并进行处理的回调方法
function receive($envelope, $queue) {
    
    
    //休眠两秒,
    sleep(2);
    //echo消息内容
    echo $envelope->getBody()."\n";
    //显式确认,队列收到消费者显式确认后,会删除该消息
    $queue->ack($envelope->getDeliveryTag());
}
//设置消息队列消费者回调方法,并进行阻塞
$q->consume("receive");
//$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生产者代码publisher.php

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2021/3/4 0004
 * Time: 22:35
 */

$config = array(
    'host' => '127.0.0.1',
    'vhost' => '/',
    'port' => 5672,
    'login' => 'guest',
    'password' => 'guest'
);
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    
    
    echo "Cannot connect to the broker";
    exit();
}
$ch = new AMQPChannel($cnn);
$ex = new AMQPExchange($ch);
//消息的路由键,一定要和消费者端一致
$routingKey = 'key_1';
//交换机名称,一定要和消费者端一致,
$exchangeName = 'exchange_1';
$ex->setName($exchangeName);
$ex->setType(AMQP_EX_TYPE_DIRECT);
$ex->setFlags(AMQP_DURABLE);
$ex->declareExchange();
//创建10个消息
for ($i=1;$i<=10;$i++){
    
    
    //消息内容
    $msg = array(
        'data'  => 'message_'.$i,
        'hello' => 'world',
    );
    //发送消息到交换机,并返回发送结果
    //delivery_mode:2声明消息持久,持久的队列+持久的消息在RabbitMQ重启后才不会丢失
    echo "Send Message:".$ex->publish(json_encode($msg), $routingKey, AMQP_NOPARAM, array('delivery_mode' => 2))."\n";
    //代码执行完毕后进程会自动退出
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RabbitMQ 的工作模式

猜你喜欢

转载自blog.csdn.net/cxhblog/article/details/114304288
今日推荐