laravel怎么使用RabbitMQ(Homestead環(huán)境)

Homestead環(huán)境下laravel怎么使用RabbitMQ?下面本篇文章就來給大家介紹一下Homestead(ubuntu) + Laravel 使用RabbitMQ的方法,希望對大家有所幫助!

laravel怎么使用RabbitMQ(Homestead環(huán)境)

Homestead(ubuntu) + Laravel 使用RabbitMQ

用法1:單獨使用laravel-queue-rabbitmq

laravel安裝rabbitmq:
首先注意自己laravel-queue-rabbitmq支持的laravel版本信息:

Package Version Laravel Version Bug Fixes Until
9 6 October 5th, 2021 Documentation
10 6, 7 October 5th, 2021 Documentation
11 8 April 6th, 2021 Documentation

執(zhí)行安裝命令:

composer?require?vladimir-yuldashev/laravel-queue-rabbitmq

等待安裝完成后在config/queue.php中添加:

'connections'?=>?[ ??//?...  ??'rabbitmq'?=>?[  ?????'driver'?=>?'rabbitmq', ?????'queue'?=>?env('RABBITMQ_QUEUE',?'default'), ?????'connection'?=>?PhpAmqpLibConnectionAMQPLazyConnection::class,  ?????'hosts'?=>?[ ?????????[ ?????????????'host'?=>?env('RABBITMQ_HOST',?'127.0.0.1'), ?????????????'port'?=>?env('RABBITMQ_PORT',?5672), ?????????????'user'?=>?env('RABBITMQ_USER',?'guest'), ?????????????'password'?=>?env('RABBITMQ_PASSWORD',?'guest'), ?????????????'vhost'?=>?env('RABBITMQ_VHOST',?'/'), ?????????], ?????],  ?????'options'?=>?[ ?????????'ssl_options'?=>?[ ?????????????'cafile'?=>?env('RABBITMQ_SSL_CAFILE',?null), ?????????????'local_cert'?=>?env('RABBITMQ_SSL_LOCALCERT',?null), ?????????????'local_key'?=>?env('RABBITMQ_SSL_LOCALKEY',?null), ?????????????'verify_peer'?=>?env('RABBITMQ_SSL_VERIFY_PEER',?true), ?????????????'passphrase'?=>?env('RABBITMQ_SSL_PASSPHRASE',?null), ?????????], ?????????'queue'?=>?[ ?????????????'job'?=>?VladimirYuldashevLaravelQueueRabbitMQQueueJobsRabbitMQJob::class, ?????????], ?????],  ?????/* ??????*?Set?to?"horizon"?if?you?wish?to?use?Laravel?Horizon. ??????*/ ?????'worker'?=>?env('RABBITMQ_WORKER',?'default'),  ??],  ??//?...????],

并且在config/queue.php中修改:

//把sync修改為rabbitmq,同理使用redis驅動則修改為redis 'default'?=>?env('QUEUE_CONNECTION',?'sync'), 'default'?=>?env('QUEUE_CONNECTION',?'rabbitmq'), //或者修改.env下QUEUE_CONNECTION=rabbitmq QUEUE_CONNECTION=rabbitmq

執(zhí)行命令生成任務類:

php?artisan?make:job?TestQueue

修改TestQueue.php代碼:

<?php namespace AppJobs;  use AppModelsUserInfo; use IlluminateBusQueueable; use IlluminateContractsQueueShouldBeUnique; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels;  class TestQueue implements ShouldQueue {     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;      private $data;      /**      * Create a new job instance.      *      * @return void      */     public function __construct($data)     {         //         $this->data?=?$data; ????}  ????/** ?????*?Execute?the?job. ?????* ?????*?@return?void ?????*/ ????public?function?handle() ????{ ????????// ????????$data?=?$this-&gt;data; ????????UserInfo::query()-&gt;firstOrCreate( ????????????["phone"?=&gt;?$data["phone"]], ????????????["name"?=&gt;?$data["name"]] ????????); ????} }

調用隊列函數(shù):

public?function?test(Request?$request){ ????$data?=?["name"?=&gt;?"李大",?"phone"?=&gt;?"12345678901"]; ????$this-&gt;dispatch(new?TestQueue($data)); }

開啟隊列:

php?artisan?queue:work

調用函數(shù)后執(zhí)行結果:

laravel怎么使用RabbitMQ(Homestead環(huán)境)

隊列消費成功,查看數(shù)據庫,數(shù)據也寫入正常。

用法2:使用laravel-queue-rabbitmq+rabbitmq-server

到這里,會有一個問題,既然方法1能夠正常使用,為什么還要加入rabbitmq-server,rabbitmq-server又是干啥的?
根據官方描述——RabbitMQ is a feature rich, multi-protocol messaging broker. It supports:

  • AMQP 0-9-1

  • AMQP 1.0

  • MQTT 3.1.1

  • STOMP 1.0 through 1.2

翻譯過來就是:RabbitMQ 是一個功能豐富的多協(xié)議消息代理。 它支持以下幾種協(xié)議。

根據RabbitMQ官網的描述:RabbitMQ runs on many operating systems and cloud environments, and provides a wide range of developer tools for most popular languages.翻譯過來就是:RabbitMQ 運行在許多操作系統(tǒng)和云環(huán)境中,并為大多數(shù)流行語言提供了廣泛的開發(fā)工具。

總結起來就是:方法1使用的是laravel隊列的使用方法,比較簡單,并沒有涉及到太多隊列當中概念性的東西(例如生產者和消費者等等),而使用rabbitmq-server,為大家提供了一個服務端,不管是什么語言,使用賬號、密碼連接到相應的host和port就能使用RabbitMQ。類似的還有EMQX(mqtt服務端)等等。并且rabbitmq-server提供了一個管理后臺,可以查看隊列的相關情況,便于管理。

啟動rabbitmq-server:

sudo?service?rabbitmq-server?start

開啟隊列:

php?artisan?queue:work

測試隊列(代碼和方法1代碼一樣)結果:

laravel怎么使用RabbitMQ(Homestead環(huán)境)

laravel怎么使用RabbitMQ(Homestead環(huán)境)

注意:

在config/queue.php的username和password里不要使用默認的guest賬號密碼來連接,否則會報錯:

The?connection?timed?out?after?3?sec?while?awaiting?incoming?data

前文已經添加過admin的賬號密碼,使用這個賬號密碼還需要給admin賬號添加權限:

sudo?rabbitmqctl?set_permissions?-p?/?admin?".*"?".*"?".*"

在rabbitmq-server管理后臺查看用戶權限:

laravel怎么使用RabbitMQ(Homestead環(huán)境)

有權限是Can access virtual hosts顯示/,無權限就是顯示No Access。

其他用法

1、laravel-queue-rabbitmq+Supervisor守護進程。本質上就是換了個隊列驅動,用法和redis無任何差別;

2、可以使用類似這種用法:java操作RabbitMQ,脫離了laravel,使用連接+生產者+消費者的方式;

3、還可以使用更復雜的用法,例如接入其他通信協(xié)議(例如MQTT),訂閱主題的方式等等,具體用法可以參考RabbitMQ官網。

總結

常規(guī)使用laravel+redis隊列+Supervisor的方式已經能滿足我們日常需要。按照錢老的《工程控制論》的說法就是——一個系統(tǒng),最新或者最先進的技術未必是最優(yōu)的,適合系統(tǒng)的、確保系統(tǒng)穩(wěn)定的才是最好的。

當然反過來我們也不能墨守成規(guī),自己的技能包也要適時的更新和進步,這樣才能無愧于自己,無愧于自己熱愛的事業(yè)。

相關推薦:最新的五個Laravel視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享