原文來着 https://www.jianshu.com/p/16c92227076c
今天我在異步隊列的選擇上,猶豫了一下。php
RabbitMQ是實現AMQP(高級消息隊列協議)的消息中間件的一種,最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。java
是一個Key-Value的NoSQL數據庫,開發維護很活躍,雖然它是一個Key-Value數據庫存儲系統,但它自己支持MQ功能,因此徹底能夠當作一個輕量級的隊列服務來使用。laravel
由於RabbitMQ具備自然的發佈訂閱模式,並且還提供了其餘模式,固然你也能夠用RabbitMQ來作GRPC
。可是Redis沒有這個,須要本身實現,換句話來講就是當消費者消費失敗的時候,消息體丟失,須要手動處理。docker
Redis:將整個Redis實例持久化到磁盤
RabbitMQ:隊列,消息,均可以選擇是否持久化數據庫
Redis:輕量級,高併發,延遲敏感
即時數據分析、秒殺計數器、緩存等瀏覽器
RabbitMQ:重量級,高併發,異步
批量數據異步處理、並行任務串行化,高負載任務的負載均衡等緩存
好比異步的發送郵箱呀、瀏覽器的用戶行爲、等非主要主線任務,異步發送Socket消息 等 均可以交給RabbitMQ消息隊列來處理。若是是主線業務流程的話,仍是考慮使用Redis吧,性能高。併發
RabbitMQ+PHP 教程一 Hello World
這是一篇簡單文章,沒用過的同窗能夠先試着安裝,能夠當時沒有業務支持,並無使用。負載均衡
如今有業務支持,使用的是laravel-queue-rabbitmq
這個擴展包,能夠參考如下文章。異步
注意:
運行php artisan queue:work rabbitmq
後,他運行的地方是在cli中,因此你每次修改完,代碼以後請務必要從新運行`php artisan queue:work rabbitmq
`
其餘問題
若是你不是java出身的同窗,可能比較麻煩....
咱們能夠借用docker ,咱們用的是rabbitmq:management
,默認密碼都爲guest
運行兩步曲
docker pull rabbitmq:management docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
而後瀏覽器能夠經過IP:15672
訪問rabbitmq
後臺。
若是你的主程序在docker裏面運行
,php
填寫的地址請填寫你本機的IP,例如192.168.1.1
而不是127.0.0.1