PHP安装rabbitmq扩展
我在項目中應用rabbitmq已很多年了,自己從沒總結過。在用的時候感覺之前的東西又忘,然后又去百度里各種找資料,找資料這種折騰的事太累。現在想把這個過程寫下來,以備不時之需,人老了記憶力在下降。寫技術文章總喜歡亂串,先說說PHP安裝rabbitmq擴展(可理解為是調用rabbitmq的php客戶端,非rabbitmq服務端),然后是rabbitmq的應用場景,具體應用下篇文章再寫。
?
一、安裝rabbitmq擴展php擴展
1、安裝依賴庫rabbitmq-c
我的環境都是源碼安裝的
#https://github.com/alanxz/rabbitmq-c.git?github地址,當前安裝的時候為v0.9.0
#mkdir build && cd build
wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz
tar -zxvf v0.9.0.tar.gz
cd ./rabbitmq-c-0.9.0
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. #只有這樣指定才會生成/usr/local/librabbitmq.so.4
cmake?--build?.?--target?install???#切記?.不要漏掉
make && make install idconfig?#這一步一定要執行,不然php?-m?的時候始終提示librabbitmq.so.4?找不到
#查看rabbitmq是裝到lib64還是lib,如果是lib64需要復制一份以lib,這個坑填了很久 php -m 的時候始終提示librabbitmq.so.4
cp -r /usr/local/lib64/* /usr/local/lib
#https://pecl.php.net/package/amqp amqp的下載地址
cd?/usr/local/src/php-5.6.40/ext/??#到你自己環境的具體位置
wget https://pecl.php.net/get/amqp-1.9.3.tgz
tar -zxvf amqp-1.9.3.tgz
cd ./amqp-1.9.3/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local
make && make install
#extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/amqp.so"?php.ini中添加此行
#重啟服務
這個可愛的界面就出來了
?
?
二、rabbitmq的應用場景
?
1、異步處理
場景說明:用戶注冊后,需要發注冊郵件和注冊短信,傳統的做法有兩種,還一個就是消息隊列(異步處理)
(1)串行方式:將注冊信息寫入數據庫后,發送注冊郵件,再發送注冊短信,以上三個任務全部完成后才返回給客戶端。這有一個問題是郵件短信并不是必須的,它只是一個通知而這種做法讓客戶端等待沒有必要等待的東西.?
?
(2)并行方式:將注冊信息寫入數據庫后,發送郵件的同時,發送短信,以上三個任務完成后,返回給客戶端,并行的方式能提高處理的時間。?
?
假設三個業務節點分別使用50ms,串行方式使用時間150ms,并行使用時間100ms。雖然并行已經提高的處理時間,但是,前面說過,郵件和短信對我正常的使用網站沒有任何影響,客戶端沒有必要等著其發送完成才顯示注冊成功,應該是寫入數據庫后就返回。
(3)消息隊列,引入消息隊列后,把發送郵件,短信不是必須的業務邏輯異步處理?
?
由此可以看出,引入消息隊列后,用戶的響應時間就等于寫入數據庫的時間+寫入消息隊列的時間(可以忽略不計),引入消息隊列后處理后,響應時間是串行的3倍,是并行的2倍。
?
2、應用解耦
場景說明:雙11是購物狂節,用戶下單后,訂單系統需要通知庫存系統,傳統的做法就是訂單系統調用庫存系統的接口。
?
這種做法有一個缺點:
(1)當庫存系統出現故障時,訂單就會失敗。
(2)訂單系統和庫存系統高耦合。
?
引入消息隊列?
?
?
訂單系統:用戶下單后訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功。
?
庫存系統:訂閱下單的消息,獲取下單消息,進行庫操作。?
就算庫存系統出現故障,消息隊列也能保證消息的可靠投遞,不會導致消息丟失。
?
3、流量削峰
流量削峰一般在秒殺搶購等活動中應用廣泛?
場景說明:秒殺活動,一般會因為流量過大,導致應用掛掉,為了解決這個問題,一般在應用前端加入消息隊列。?
作用:?
(1)可以控制活動人數,超過此一定閥值的訂單直接丟棄(前兩年搶小米手機一次都沒有成功過呢^^)?
(2)可以緩解短時間的高流量壓垮應用(應用程序按自己的最大處理能力獲取訂單)?
用戶的請求,服務器收到之后,首先寫入消息隊列,加入消息隊列長度超過最大值,則直接拋棄用戶請求或跳轉到售罄頁面.?
秒殺業務根據消息隊列中的請求信息,再做后續處理。
?
?
關注快樂程序員公眾號,每日分享一點小知識。愛編程,愛生活!
總結
以上是生活随笔為你收集整理的PHP安装rabbitmq扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: p3369跳表代替平衡树
- 下一篇: 动态规划算法php,php算法学习之动态