【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用

一、window下安装消息队列服务

1、RabbitMQ(下载地址:https://www.rabbitmq.com/download.html)依赖erlang(下载地址:http://www.erlang.org/downloads),所以先安装erlang,然后再安装RabbitMQ,直接下一步安装即可;

2、找到RabbitMQ安装目录,如 C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.17\sbin,按住键盘Shift键点击右键,选择在此打开命令窗口,

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第1张图片

,然后输入(激活插件):rabbitmq-plugins enable rabbitmq_management。

最后重启服务器:net stop RabbitMQ && net start RabbitMQ

3、在浏览器中输入:http://127.0.0.1:15672,默认账号密码为:guest

二、window环境php_amqp扩展安装

1、安装前需要查看php版本,phpinfo()

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第2张图片

2、安装扩展

1)下载扩展 http://pecl.php.net/package ,选择最新版本点击DLL

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第3张图片

2) 根据前面的php版本下载对应包

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第4张图片

3)把解压出的php_amqp.dll文件复制到php对应的ext目录下(C:\soft\php-7.3.4\ext)

4)修改php.ini文件加上: extension=php_amqp

5)修改apache下的httpd.conf文件(C:\soft\Apache24\conf\httpd.conf),在做好添加:LoadFile  "C:/soft/php-7.3.4/rabbitmq.4.dll"

6)重启apache,再次查看phpinfo(),如图所示,表示安装成功。

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第5张图片

三、php CodeIgniter(ci)框架使用RabbitMQ消息队列

1、安装扩展类:在项目目录下打开CMD窗口,输入composer require php-amqplib/php-amqplib 安装

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第6张图片

如果没有正常安装,可以先执行composer update后在回来执行composer require php-amqplib/php-amqplib

2、使用

【php消息队列RabbitMQ】window环境php_amqp扩展安装+php CodeIgniter(ci)框架+RabbitMQ使用_第7张图片

在ci项目控制器目录下创建RabbitMQ.php文件,D:\wwwroot\CodeIgniter\application\controllers\RabbitMQ.php

AMQConfig = array(
            'host' => '127.0.0.1',
            'port' => '5672',
            'login' => 'DSS',
            'password' => '123456',
            'vhost'=>'DSS'
        );
        $this->exchangeName = 'DSS'; //交换机名
        $this->queueName = 'DSS_ORDER'; //队列名
        $this->routeName = 'DSS_ORDER'; //路由key
    }

    //消息生产者
    public function send(){
        //创建连接和channel
        $conn = new AMQPConnection($this->AMQConfig);
        if (!$conn->connect()) {
            die("Cannot connect to the broker!
"); } $channel = new AMQPChannel($conn); //创建交换机对象 $ex = new AMQPExchange($channel); $ex->setName($this->exchangeName); //发送消息 //$channel->startTransaction(); //开始事务 for ($i = 1; $i <= 5; ++$i) { //消息内容 $message = $i . ".Send Mssage Success! " . date("Y-m-d h:i:s"); echo $i . ".Send Message:" . $ex->publish($message, $this->routeName) . "
"; } //$channel->commitTransaction(); //提交事务 $conn->disconnect(); } //消费者 public function receive(){ //创建连接和channel $conn = new AMQPConnection($this->AMQConfig); if (!$conn->connect()) { die("Cannot connect to the broker!\n"); } $channel = new AMQPChannel($conn); //创建交换机 $ex = new AMQPExchange($channel); $ex->setName($this->exchangeName); $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型(常用的有fanout、direct、topic、headers) $ex->setFlags(AMQP_DURABLE); //持久化 $ex->declareExchange(); //echo "Exchange Status:".$ex->declare()."\n"; //创建队列 $q = new AMQPQueue($channel); $q->setName( $this->queueName); $q->setFlags(AMQP_DURABLE); //持久化 $total = $q->declareQueue(); echo "Message Total:". $total ."
"; //绑定交换机与队列,并指定路由键 $q->bind($this->exchangeName, $this->routeName); //阻塞模式接收消息 echo "Message:
"; if($total) { for ($i=1;$i<=$total;$i++) { //消息者回调函数 //处理生产者发送过来的数据 //$q->consume('processMessage'); //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答 $envelope = $q->get(); $msg = $envelope->getBody(); echo $msg . "
"; //处理消息 $q->ack($envelope->getDeliveryTag()); //手动发送ACK应答,通知消息队列数据已处理,删除该数据 } } $conn->disconnect(); } }

 

你可能感兴趣的:(php,CodeIgniter)