PHP消息隊列及應用思路

1.消息隊列概念

  • 1.1. 隊列結構的中間件

  • 1.2. 消息放入後,不需立即處理

  • 1.3. 由訂閱者/消費者按順序處理

2.隊列介質

  • 2.1. Mysql:可靠性高,易實現,速度慢

  • 2.2. redis:速度快,單條大消息包時效率低

  • 2.3. 消息系統:專業性強、可靠、學習成本高(如RabbitMQ)

3.消息處理觸發機制

  • 3.1. 死循環方式讀取:易實現,故障時無法及時恢復

  • 3.2. 定時任務:壓力均分,有處理量上限

  • 3.3. 守護進程:類似於php-fpm、php-cg、supervisor,需要shell基礎

4.應用

  • 4.1. 解耦系統 - mysql

    • 現在有訂單系統和配送系統,需要使用隊列消息把兩個系統解耦出來

    • 建立一個 mySql 的訂單隊列數據表,所有訂單信息都會記錄到這個訂單表中,然後使用 crontab 定時把商品配送出去

  • 4.2 商城秒殺活動 - Redis 的 list 消息隊列:

    • 4.2.1. 秒殺程序把請求寫入Redis、(Uid,time_stamp) 微秒:microtime()
    • 4.2.2. 檢查Redis已存放的長度,超出上限直接丟棄
    • 4.2.3. 死循環處理存入Redis的數據併入庫
  • 4.3. RabbitMQ架構和原理 官網傳送門

    • 特定:完整的實現AMQP、集羣簡化、持久化、跨平臺

    RabbitMQ使用

    • RabbitMQ 安裝(rabbitmq-server、php-amqplib)
    • 生產者向消息通道發送消息
    • 消費者處理信息

PS:另外我覺得 beanstalkd 服務也是不錯的,它是一個高性能、輕量級的分佈式內存隊列系統,讀者可自行了解一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章