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