php定时发送生日模块消息_RocketMQ消息队列介绍与应用
RocketMQ簡單介紹
RocketMQ是一個消息中間件,MQ的主要特點為解耦、異步、削峰,具有高性能、高可靠、高實時、分布式特點,用于減少數據庫壓力的業務場景,其中RocketMQ的核心組件概念如下:
支持嚴格的消息順序
支持Topic與Queue兩種模式
億級消息堆積能力
支持多種消息協議,如 JMS、MQTT 等
分布式高可用的部署架構,滿足至少一次消息傳遞語義
提供 docker 鏡像用于隔離測試和云集群部署
提供配置、指標和監控等功能豐富的 DashboardRocketMQ結構
Name Server:注冊中心(zookeeper)頻繁更新offset。
Producer:消息生產者 生產消息 寄件人。
Consumer:消息消費者、復制消息消費、收件人。
Broker:中介(郵政) 提供消息中轉服務。
Group :分組好處(業務區分,便于管理)。
Tag:多個標簽 where 。
Key:區分業務系統 。
Msgid: broker在這個系統中它是獨一無二的。
PS:消息中間件的最重要的作用是異步和解耦。圖中箭頭的含義
從 Broker 開始,Broker Master1 和 Broker Slave1 是主從結構,它們之間會進行數據同步,即 Date Sync。同時每個 Broker 與
NameServer 集群中的所有節點建立長連接,定時注冊 Topic 信息到所有 NameServer 中。
Producer 與 NameServer 集群中的其中一個節點(隨機選擇)建立長連接,定期從 NameServer 獲取 Topic 路由信息,并向提供 Topic 服務的 Broker Master 建立長連接,且定時向 Broker 發送心跳。Producer 只能將消息發送到 Broker master,但是 Consumer 則不一樣,它同時和提供 Topic 服務的 Master 和 Slave
建立長連接,既可以從 Broker Master 訂閱消息,也可以從 Broker Slave 訂閱消息。RocketMQ事務消息設計思路
應用模塊遇到要發送事務消息的場景時,先發送prepare消息給MQ。
prepare消息發送成功后,應用模塊執行數據庫事務(本地事務)。
根據數據庫事務執行的結果,再返回Commit或Rollback給MQ。
如果是Commit,MQ把消息下發給Consumer端,如果是Rollback,直接刪掉prepare消息。
第3步的執行結果如果沒響應,或是超時的,啟動定時任務回查事務狀態(最多重試15次,超過了 默認丟棄此消息),處理結果同第4步。
MQ消費的成功機制由MQ自己保證。
業務案例
有一個點贊業務,不限制用戶的點贊數只需進行記錄(產品需求,開發提議無效),當每個用戶都進行x連擊享受數量猛增的快感時如果數據庫都需要進行x個點贊數據的插入,數據庫毫無疑問會塞死導致崩潰。
于是想到可以嘗試下MQ削峰,比如每秒來了5000消息但數據庫只能承受2000,那我消費時每次只拉取消費1600就好了,剩下的放在Broker堆積慢慢消費就好。由于之前的消息中心也在用RocketMQ,于是確認使用RocketMQ來進行削峰。
五、結束語
本篇簡單介紹了Rocket基本的設計思路和流程,注意要保證數據可靠,需采用同步刷盤和同步雙寫的方式,但性能會較其他方式低,文章內有任何不正確或不詳盡之處請留言指導,謝謝。
總結
以上是生活随笔為你收集整理的php定时发送生日模块消息_RocketMQ消息队列介绍与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode怎么写qt项目_使用VSCo
- 下一篇: 厦门到漳州帮帮出行叫车电话?