Mac安裝rabbitMQ、php擴(kuò)展及運(yùn)行demo

Mac安裝RabbitMQ直接用

brew install rabbitmq

安裝php擴(kuò)展麻煩在于需要很多依賴
PHP 使用 AMQP 協(xié)議來連接 Rabbitmq, AMQP 協(xié)議即 “Advanced Message Queuing Protocol ”,高級(jí)消息隊(duì)列協(xié)議。

使 PHP 支持 AMQP 協(xié)議,需要安裝:

  • rabbitmq 的客戶端 C 類庫(kù) rabbitmq-c
  • PHP 官方提供的 AMQP 擴(kuò)展 https://pecl.php.net/package/amqp phper必備網(wǎng)址 我在此選擇的是 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

#我電腦環(huán)境有多php環(huán)境所以指定版本 下面的config如是
/usr/local/Cellar/php@7.2/7.2.26/bin/phpize

./configure  --with-php-config=/usr/local/Cellar/php@7.2/7.2.26/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0

make && make install

問題來了
我在編譯的時(shí)候反復(fù)出現(xiàn)如下錯(cuò)誤,開始以為是我弄丟了文件,重復(fù)刪除、解壓。

image.png

問題原因就是找不到 amqp_ssl_socket.h 文件
解決辦法也很簡(jiǎn)單,找到這個(gè)文件在你電腦的位置,復(fù)制一份到當(dāng)前目錄就OK,然后繼續(xù)重新make && make install 就可以
image.png

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


image.png

重啟你的php 開始coding吧

在你的環(huán)境下創(chuàng)建一個(gè)consume.php

<?php

//聲明連接參數(shù)
$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();
}
//在連接內(nèi)創(chuàng)建一個(gè)通道
$ch = new AMQPChannel($cnn);
//創(chuàng)建一個(gè)交換機(jī)
$ex = new AMQPExchange($ch);
//聲明路由鍵
$routingKey = 'key_1';
//聲明交換機(jī)名稱
$exchangeName = 'exchange_1';
//設(shè)置交換機(jī)名稱
$ex->setName($exchangeName);
//設(shè)置交換機(jī)類型
//AMQP_EX_TYPE_DIRECT:直連交換機(jī)
//AMQP_EX_TYPE_FANOUT:扇形交換機(jī)
//AMQP_EX_TYPE_HEADERS:頭交換機(jī)
//AMQP_EX_TYPE_TOPIC:主題交換機(jī)
$ex->setType(AMQP_EX_TYPE_DIRECT);
//設(shè)置交換機(jī)持久
$ex->setFlags(AMQP_DURABLE);
//聲明交換機(jī)
$ex->declareExchange();
//創(chuàng)建一個(gè)消息隊(duì)列
$q = new AMQPQueue($ch);
//設(shè)置隊(duì)列名稱
$q->setName('queue_1');
//設(shè)置隊(duì)列持久
$q->setFlags(AMQP_DURABLE);
//聲明消息隊(duì)列
$q->declareQueue();
//交換機(jī)和隊(duì)列通過$routingKey進(jìn)行綁定
$q->bind($ex->getName(), $routingKey);
//接收消息并進(jìn)行處理的回調(diào)方法
function receive($envelope, $queue) {
    //休眠兩秒,
    sleep(2);
    //echo消息內(nèi)容
    echo $envelope->getBody()."\n";
    //顯式確認(rèn),隊(duì)列收到消費(fèi)者顯式確認(rèn)后,會(huì)刪除該消息
    $queue->ack($envelope->getDeliveryTag());
}
//設(shè)置消息隊(duì)列消費(fèi)者回調(diào)方法,并進(jìn)行阻塞
$q->consume("receive");
//$q->consume("receive", AMQP_AUTOACK);//隱式確認(rèn),不推薦

然后,我在終端開啟三個(gè)進(jìn)程
可以在圖形化中看見有三個(gè)消費(fèi)者在等待


image.png

perfect

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容