laravel隊(duì)列并發(fā)消費(fèi) 如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?1. 在上圖中定義發(fā)送和使用消息的過程2。首先定義消息協(xié)議,如ActiveMQ、stomp、XMPP等3。定義消息協(xié)議,定義消息隊(duì)列需要滿足的場(chǎng)景是否要保證消息的可靠性,必要
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
1. 在上圖中定義發(fā)送和使用消息的過程
2。首先定義消息協(xié)議,如ActiveMQ、stomp、XMPP等
3。定義消息協(xié)議,定義消息隊(duì)列需要滿足的場(chǎng)景
是否要保證消息的可靠性,必要時(shí)要保證存儲(chǔ)的高可用性
是否要支持同步和異步消息
是否要保證消息隊(duì)列例如rocketmq是高可靠性,卡夫卡是高吞吐量,但不高可靠性。
什么是買賣隊(duì)列?
銷售隊(duì)列中的數(shù)字顯示每個(gè)人有多少只手(一只手等于100股),并根據(jù)價(jià)格排列。例如,如果買入的最高價(jià)格是20元,如果有10只手掛20元,他們將被排在買入10的第一個(gè)顯示,如果有8只手掛20元,他們將被排在買入8的第二個(gè)顯示。銷售也是如此。如果最低售價(jià)是19元,一共有12手,第一個(gè)售價(jià)會(huì)顯示12手,第二個(gè)低價(jià)是19.20元。如果賣出價(jià)是14手,第二個(gè)賣出價(jià)將顯示14手。成交時(shí),先成交買一或賣一,再成交買二或賣二。而同樣價(jià)格的申請(qǐng)書(如最高價(jià)20元的10手掛單),則是按照掛單時(shí)間順序成交。
消息隊(duì)列,如何保證消息不被重復(fù)消費(fèi)?
現(xiàn)在消息機(jī)制一般是通過中間件實(shí)現(xiàn)的,如Kafka、ActiveMQ等。一般來說,有兩種消費(fèi)策略:至少一次和最多一次。
首先,至少一次。在這種情況下,使用消息很重要,不能容忍丟失。使用者從中間件集群中提取消息,在內(nèi)部消費(fèi),并將消費(fèi)結(jié)果通知集群。如果用戶計(jì)算機(jī)重新啟動(dòng)或網(wǎng)絡(luò)丟失數(shù)據(jù)包,此時(shí)將提取重復(fù)的消息。一般的解決方案是保證對(duì)使用者業(yè)務(wù)邏輯進(jìn)行冪等處理。
第二,至少再來一次。此時(shí),消息可能會(huì)丟失,并且不會(huì)重復(fù)消費(fèi)。
作為接收器,保持接口冪等是一項(xiàng)基本功能。它可以處理一些意外情況,例如群集故障,或者需要跟蹤消息數(shù)據(jù)的歷史以便重新處理等
Rabbitmq從未使用過。在ActiveMQ中,我剛剛測(cè)試了可以有多個(gè)消費(fèi)者,消息按順序分發(fā)給不同的消費(fèi)者,比如消息1到消費(fèi)者a,消息2到消費(fèi)者B,消息3到消費(fèi)者a,消息4到消費(fèi)者B。。其優(yōu)點(diǎn)是實(shí)現(xiàn)了負(fù)載均衡。如果消費(fèi)者B突然掛斷,消費(fèi)者a可以正常接收。
我明白,如果我說的是錯(cuò)的,我希望有上帝來糾正它。非常感謝你。
rabbitMQ點(diǎn)對(duì)點(diǎn),一個(gè)隊(duì)列可以多個(gè)消費(fèi)者嗎?
作為一個(gè)服務(wù)層,由于其更好的性能,PHP適合上層業(yè)務(wù)開發(fā),通信可以使用HTTP,編碼格式可以使用JSON或Pb