Mac安装rabbitMQ、php扩展及运行demo

Mac安装RabbitMQ直接用

brew install rabbitmq

安装php扩展麻烦在于需要很多依赖
PHP 使用 AMQP 协议来连接 Rabbitmq, AMQP 协议即 “Advanced Message Queuing Protocol ”,高级消息队列协议。

使 PHP 支持 AMQP 协议,需要安装:

  • rabbitmq 的客户端 C 类库 rabbitmq-c
  • PHP 官方提供的 AMQP 扩展 https://pecl.php.net/package/amqp phper必备网址 我在此选择的是 amqp-1.9.3.tgz版本

我都是编译安装的方法

  1. 首先安装rabbitmq-c
wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gz

tar zxvf rabbitmq-c-0.8.0.tar.gz

cd rabbitmq-c-0.8.0

./configure --prefix=/usr/local/rabbitmq-c-0.8.0

make && make install
  1. 其次安装amqp
wget -c http://pecl.php.net/get/amqp-1.9.3.tgz

tar zxf amqp-1.9.3.tgz

cd amqp-1.9.3

#我电脑环境有多php环境所以指定版本 下面的config如是
/usr/local/Cellar/[email protected]/7.2.26/bin/phpize

./configure  --with-php-config=/usr/local/Cellar/[email protected]/7.2.26/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0

make && make install

问题来了
我在编译的时候反复出现如下错误,开始以为是我弄丢了文件,重复删除、解压。

image.png

问题原因就是找不到 amqp_ssl_socket.h 文件
解决办法也很简单,找到这个文件在你电脑的位置,复制一份到当前目录就OK,然后继续重新make && make install 就可以
image.png

然后,将你的amqp.so放到你的php.ini里 extension=amqp.so


image.png

重启你的php 开始coding吧

在你的环境下创建一个consume.php

 '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);//隐式确认,不推荐

然后,我在终端开启三个进程
可以在图形化中看见有三个消费者在等待


image.png

perfect

你可能感兴趣的:(Mac安装rabbitMQ、php扩展及运行demo)