php rabbitmq的安装与使用

229 阅读2分钟

一:rabbitMQ安装

1、erlang安装

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
yum install -y erlang

2、2.RabbitMQ安装

导入将于2018121日起使用的新PackageCloud密钥(GMT),完成RabbitMQ的前置条件配置
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
执行云存储库快速脚本
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
安装
yum install rabbitmq-server -y

或者下载rabbitmq-server-3.8.9-1.el7.noarch.rpm到服务器,yum install -y rabbitmq-server-3.8.9-1.el7.noarch.rpm

3、php扩展 php-amqplib安装

wget https://pecl.php.net/get/amqp-2.1.1.tgz
tar zxvf amqp-amqp-2.1.1.tgz  
cd amqp-amqp-2.1.1  
/usr/local/php/bin/phpize
./configure --with-php-config=/www/server/php/73/bin/php-config --with-amqp
make  
make install  
vim /usr/local/php/etc/php.ini  
extension=amqp

php扩展 php-amqplib安装

    composer require php-amqplib/php-amqplib
    //如果是window php.ini添加扩展
    extension=php_amqp.dll

window下安装如果报错,提示需要安装ampq 扩展,pecl.php.net/package/amq… 选择和php版本匹配的文件下载,下载后php_amqp.dll 放到php的ext,rabbitmq.4.dll 放到php目录下,即和php.exe在一个目录,同时需要开启sockets扩展

4、rabbitmq 启动与开机自启动

systemctl start rabbitmq-server.service   启动
systemctl status rabbitmq-server.service   状态
systemctl stop rabbitmq-server.service   停止
systemctl restart rabbitmq-server.service   重启
systemctl enable rabbitmq-server.service  设置开启自启动

5、启用管理后台

rabbitmq-plugins enable rabbitmq_management

6、配置权限

chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/

7、增加用户

rabbitmqctl add_user admin 123456 
//有报错提示可以不管

8、设置角色

rabbitmqctl set_user_tags admin administrator

9、设置用户权限

rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'

10、查看用户

rabbitmqctl list_users

11、放开防火墙端口号5672和15672或者关闭防火墙 登录web端可以看到rabbitmq登录页面

ip:15672

二:rabbitmq_delayed_message_exchange 延时插件安装

下载地址:github.com/rabbitmq/ra…

image.png 找到相应的版本下载

image.png 把下载下来的插件上传到rebbit插件目录如:/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.6/plugins

启用插件

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

查看插件列表

rabbitmq-plugins list

image.png

安装成功,多一个type为x-delayed-message

image.png

代码实现

    public function testProducer(){
        $rabbit = new RabbitMQ();
        $queueName = 'test-producer';
        $rabbit->producer($queueName,'aaa');
    }

    public function testConsumer(){
        $rabbit = new RabbitMQ();
        $queueName = 'test-producer';
        $callback = function ($message) {
            $data = json_decode($message->body,true);
            logging('test','test','bbb');
            $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']); //ack
        };
        $rabbit->consumeMessage($queueName, $callback);
    }

    public function testDelayQueue(){
        $rabbit = new RabbitMQ();
        $queueName = 'test-delay';
        $rabbit->createDelay($queueName);
        $rabbit->sendDelayMessage("this is a  delay test",$queueName,$queueName,5);
    }

    public function delay_consumer(){
        $rabbit = new RabbitMQ();
        $queueName = 'test-delay';
        $callback = function ($message) {
            var_dump("Received Message : " . $message->body);
            $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag'], false);
        };
        $rabbit->consumeDelayMessage($queueName, $callback);
    }