Homestead(ubuntu)下laravel使用RabbitMQ——伺服器配置篇

她來聽我的演唱會發表於2020-08-29
  • 前言

    最近在投簡歷和麵試的過程中,發現很多做電商的企業均要求KafkaRabbitMQ。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肯定也可以!

  • 開始

  1. 安裝erlang
    erlang是RabbitMQ的依賴.首先執行
    sudo apt-get update
    然後執行
    sudo apt-get install erlang
    安裝完畢後,輸入erl檢視erlang版本,出現如下提示則表示安裝成功:
    Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
    然後退出erlang命令列:按下ctrl+c,然後輸入a即可。
  2. 安裝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 
  3. 配置RabbitMQ
    執行命令,啟動RabbitMQ外掛:
    sudo rabbitmq-plugins enable rabbitmq_management
    這個可以啟動RabbitMQ的web控制檯。

新增使用者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後臺了。

  1. 開啟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

退出重啟伺服器,訪問結果:

  1. 執行環境(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
    在這裡安裝可能會遇到一些小問題,遇事不決就執行:
    sudo apt-get update
    //時間可能會需要很久,我執行等它執行的時候大概花了一個小時
    sudo apt-get upgrade
    以上的擴充套件安裝完成後執行指令安裝amqp擴充套件:
    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 協議》,轉載必須註明作者和本文連結

相關文章