Laravel異步隊列,選擇Redis仍是Redis?

原文來着 https://www.jianshu.com/p/16c92227076c

今天我在異步隊列的選擇上,猶豫了一下。php

RabbitMQ

RabbitMQ是實現AMQP(高級消息隊列協議)的消息中間件的一種,最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。java

Redis

是一個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這個擴展包,能夠參考如下文章。異步

Laravel5.6 整合 RabbitMQ 消息隊列

注意:
運行php artisan queue:work rabbitmq後,他運行的地方是在cli中,因此你每次修改完,代碼以後請務必要從新運行`php artisan queue:work rabbitmq
`
其餘問題

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

相關文章
相關標籤/搜索