php-amqp 是 PHP 官方維護的 RabbitMQ 客戶端擴展,底層依賴 librabbitmq C 庫。本文詳細記錄從源碼編譯安裝 librabbitmq 0.5.2 和 php-amqp 1.4.0 的完整步驟,含版本匹配、依賴處理、PHP-FPM 重啟驗證,適合生產環境部署參考。
| 組件 | 推薦版本 | 說明 |
|---|---|---|
| librabbitmq | 0.5.2 | C 客戶端庫,與 php-amqp 1.4.0 完美兼容 |
| php-amqp | 1.4.0 | PHP 官方擴展,支援 PHP 5.3~7.x |
| RabbitMQ 服務端 | 3.6+ | 協議版本 0-9-1,向下兼容 |
注意:新版本librabbitmq 0.8.0+需搭配php-amqp 1.9.0+,請勿混用。
# 1. 下載源碼 wget https://github.com/alanxz/rabbitmq-c/archive/v0.5.2.tar.gz -O rabbitmq-c-0.5.2.tar.gz # 或備用地址 # wget https://pecl.php.net/get/rabbitmq-c-0.5.2.tgz # 2. 解壓進入 tar -xzvf rabbitmq-c-0.5.2.tar.gz cd rabbitmq-c-0.5.2 # 3. 生成配置腳本 autoreconf -i # 4. 配置安裝前綴(重要:php-amqp 編譯時需指定此路徑) ./configure --prefix=/usr/local/librabbitmq/0.5.2/ # 5. 編譯安裝 make && make install # 6. 驗證 ls /usr/local/librabbitmq/0.5.2/lib/ # 應見到 librabbitmq.so.4 等動態庫文件
# 1. 下載源碼
wget https://pecl.php.net/get/amqp-1.4.0.tgz
tar -xzvf amqp-1.4.0.tgz
cd amqp-1.4.0
# 2. phpize(根據實際 PHP 安裝路徑調整)
/usr/local/php/bin/phpize
# 3. 配置
# --with-php-config 指向 php-config
# --with-librabbitmq-dir 指向第一步安裝的 librabbitmq 目錄
./configure \
--with-php-config=/usr/local/php/bin/php-config \
--with-amqp \
--with-librabbitmq-dir=/usr/local/librabbitmq/0.5.2/
# 4. 編譯安裝
make && make install
# 5. 輸出提示中會顯示 .so 安裝路徑,如:
# Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
# 1. 編輯 php.ini echo "extension=amqp.so" >> /usr/local/php/etc/php.ini # 2. 重啟 PHP-FPM /usr/local/php/sbin/php-fpm restart # 或 systemctl restart php-fpm # 3. 驗證 php -m | grep amqp # 應輸出 amqp php --ri amqp # 顯示擴展信息、版本、librabbitmq 版本等
| 錯誤現象 | 原因 | 解決方案 |
|---|---|---|
| configure: error: librabbitmq not found | --with-librabbitmq-dir 路徑錯誤 | 指向包含 include/amqp.h 和 lib/librabbitmq.so 的目錄 |
| make 失敗:amqp_connection.c: undefined reference to amqp_... | librabbitmq 版本不匹配 | 嚴格使用 0.5.2 配合 1.4.0 |
| phpize: command not found | 未安裝 php-dev / php-devel 包 | yum install php-devel / apt install php-dev |
| 運行時錯誤:librabbitmq.so.4: cannot open shared object file | 動態庫路徑未加載 | echo "/usr/local/librabbitmq/0.5.2/lib" > /etc/ld.so.conf.d/rabbitmq.conf && ldconfig |
<?php
// test_amqp.php
$conn = new AMQPConnection([
'host' => '127.0.0.1',
'port' => 5672,
'vhost' => '/',
'login' => 'guest',
'password' => 'guest',
]);
if ($conn->connect()) {
echo "連接成功!\n";
$channel = new AMQPChannel($conn);
$exchange = new AMQPExchange($channel);
$exchange->setName('test_exchange');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declareExchange();
$exchange->publish('Hello RabbitMQ', 'test_key');
echo "消息發送成功\n";
$conn->disconnect();
} else {
echo "連接失敗\n";
}
?>
yum install php-pecl-amqp、Ubuntu apt install php-amqp,自動處理依賴與升級"ext-amqp": "1.4.0" 確保運行環境一致AMQPConnectionException、AMQPChannelException,實現重試與熔斷掌握 librabbitmq + php-amqp 源碼編譯安裝,能應對無網絡環境、特定版本需求、自定義編譯參數等場景。生產環境首選系統包管理器,開發測試環境可參考本文手動編譯。版本匹配是關鍵:**librabbitmq 0.5.2 + php-amqp 1.4.0** 是經驗證的穩定組合。