rabbitMQ容器

使用场景:1.限流 2.确保消息数据可靠性的 3.逻辑解耦

rabbitMQ运行的语言erl需要先安装erl环境

1.第一步

进入erl包地址选择自己系统的版本下载rabbitmq/erlang - Packages · packagecloud

查看系统 uname -a

  rabbitMQ容器_第1张图片

执行者三步,

我的因为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

 rabbitMQ容器_第2张图片

输入erl就可以验证是否安装成功

2.第二步安装RabbitMQ 

(1)安装包:rabbitmq/rabbitmq-server - Packages · packagecloud

选择自己系统的版本

rabbitMQ容器_第3张图片

 (2)  执行

        rabbitmq-plugins enable rabbitmq_management  //启动 rabbitmq 的插件管理。

        systemctl start rabbitmq-server        //开启服务

(3) 开放端口 15672、5672  访问 http://ip:15672管理后台

  rabbitMQ容器_第4张图片

(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 ".*" ".*" ".*"

 3.第三步连接使用rabbitqm

        php使用 AMQP (Advanced Message Queuing Protocol) 需要安装 windows下安装amqp扩展             linux 下安装php中如何安装amqp扩展 - 编程语言 - 亿速云

        先查看自己的php版本 ,

        rabbitMQ容器_第5张图片

 解压:

(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

rabbitMQ容器_第6张图片

4.第三步简单rabbitqm使用测试

rabbitMQ容器_第7张图片

 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是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。

你可能感兴趣的:(容器,rabbitmq,分布式)