前言
最近在投簡歷和麵試的過程中,發現很多做電商的企業均要求Kafka
和RabbitMQ
。Kafka暫未研究,今天先來看一看如何在Homestead下結合laravel使用RabbitMQ(基本概念可參考此文:RabbitMQ 訊息佇列)參考資料
感謝所有文章作者!
RabbitMQ 訊息佇列
laravel + rabbitmq
laravel下安裝RabbitMQ:Github
ubuntu下使用apt-get一步步安裝rabbitmq
laravel中文文件-佇列
ubuntu下安裝amqp擴充套件準備階段
首先開始前,要明白佇列的基本概念:Laravel 佇列為各種不同的佇列後端 (如 Beanstalk、Amazon SQS、Redis 甚至關聯式資料庫) 提供了的統一 API。通過佇列,你可以將耗時任務 (如傳送電子郵件) 的處理往後推延。延遲這些耗時的任務可以極大地提升 web 請求響應速度。
由此可知,佇列一般是作為延時任務
。由此可以推斷出,對於電商業務,佇列可以做傳送郵件,使用者下單(例如30分鐘不付款關閉訂單)等功能。
之前使用Redis體驗過簡單的佇列,使用佇列傳送郵件,而laravel提供的佇列,常用的就是redis,具體使用方法就是安裝相關的包,修改配置檔案.evn
或者app/config/queque.php
的佇列連線(以redis為例):.evn:
QUEUE_CONNECTION=redis
app/config/queque.php:
'default' => env('QUEUE_CONNECTION', 'redis'),
因此不難看出,原則上不管是什麼佇列,只要修改預設佇列連線,就可以使用該佇列訊息。
之前的公司使用過mqtt,mqtt使用除了在服務端和介面等使用,還可以通過安裝(類似於寶塔那種),有一個mqtt的管理後臺,更加方便管理。當我看到這篇文章laravel + rabbitmq,突然讓我有了大膽的想法。docker可以,那Homestead肯定也可以!
- 安裝erlang
erlang是RabbitMQ的依賴.首先執行
然後執行sudo apt-get update
安裝完畢後,輸入sudo apt-get install erlang
erl
檢視erlang版本,出現如下提示則表示安裝成功:
然後退出erlang命令列:按下ctrl+c,然後輸入a即可。Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
- 安裝RabbitMq:
執行:
等待安裝完畢提示:sudo apt-get install rabbitmq-server
安裝完畢後,檢視RabbitMQ狀態:sudo rabbitmqctl status
附:啟動RabbitMQ: service rabbitmq-server start 停止RabbitMQ: service rabbitmq-server stop 重啟RabbitMQ: service rabbitmq-server restart
- 配置RabbitMQ
執行命令,啟動RabbitMQ外掛:
這個可以啟動RabbitMQ的web控制檯。sudo rabbitmq-plugins enable rabbitmq_management
新增使用者RabbitMQ,格式:rabbitmqctl add_user 使用者名稱 密碼
。
例如:
rabbitmqctl add_user admin admin
給予使用者管理員許可權:
sudo rabbitmqctl set_user_tags admin administrator
為使用者設定讀寫許可權:
sudo rabbitmqctl set_permissions -p / 使用者名稱 ".*" ".*" ".*"
如:
sudo rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”
好了,至此就可以訪問RabbitMQ後臺了。
- 開啟RabbitMQ後臺:
瀏覽器中輸入:http://伺服器ip+:15672,例如我的是:192.168.10.10:15672/
但是這裡就有個問題,瀏覽器提示:無法訪問此網站192.168.10.10 拒絕了我們的連線請求。
原因是伺服器(ubuntu)15672埠預設是關閉的,因此需要開啟。
很簡單,執行兩條指令:
1. sudo apt-get install iptables
2. sudo iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
退出重啟伺服器,訪問結果:
- 執行環境(ubuntu)安裝amqp擴充套件
這些擴充套件是執行必須,可以類比為mongodb,redis擴充套件。
分別執行以下指令:
在這裡安裝可能會遇到一些小問題,遇事不決就執行:sudo apt-get -y install gcc make autoconf libc-dev pkg-config sudo apt-get -y install libssl-dev sudo apt-get -y install librabbitmq-dev
以上的擴充套件安裝完成後執行指令安裝amqp擴充套件:sudo apt-get update //時間可能會需要很久,我執行等它執行的時候大概花了一個小時 sudo apt-get upgrade
安裝過程中會提示:sudo pecl install amqp
回車即可,等待安裝完成:28 source files, building running: phpize Configuring for: PHP Api Version: 20170718 Zend Module Api No: 20170718 Zend Extension Api No: 320170718 Set the path to librabbitmq install prefix [autodetect] :
You should add "extension=amqp.so" to php.ini
這裡還會有個小坑,php.ini在/etc/php/7.2下有兩個(具體自己的php版本是哪個可以使用php -v
檢視),一個是:/etc/php/7.2/cli/php.ini
,另一個是:/etc/php/7.2/fpm/php.ini
,因此,不管加入什麼擴充套件都要分別加入進去。
加入完成,重啟php:sudo service php7.2-fpm restart
。然後執行php -m
檢視擴充套件是否安裝完成:
至此,RabbitMQ的伺服器端配置完成。
下一篇將會記錄應用端如何去應用RabbitMQ。
本作品採用《CC 協議》,轉載必須註明作者和本文連結