laravel隊列消費方式 JAVA如何用隊列實現(xiàn)并發(fā)?
JAVA如何用隊列實現(xiàn)并發(fā)?如果是為了爭奪資源,按照先到先得的規(guī)則不作弊,那么一個相對簡單的實現(xiàn)就是排隊。無論請求的并發(fā)度有多高,如果用線程來服務用戶,也就是說一個人請求資源,那么就啟動一個線程,CP
JAVA如何用隊列實現(xiàn)并發(fā)?
如果是為了爭奪資源,按照先到先得的規(guī)則不作弊,那么一個相對簡單的實現(xiàn)就是排隊。無論請求的并發(fā)度有多高,如果用線程來服務用戶,也就是說一個人請求資源,那么就啟動一個線程,CPU總是按順序執(zhí)行線程,比如現(xiàn)在有三個人(passer-by-a,passer-by-B,passer-by-C)請求一個資源,服務器有三個線程為這三個人服務。假設這三個人在請求時沒有足夠的幸運及時得到CPU時間片,那么他們就等于公平競爭CPU資源,CPU選擇運行線程的順序是不確定的,如果選擇運行路人C的線程,就把它放入隊列。路人B、路人C等等,他們可能會奇怪為什么不及時處理,因為后續(xù)操作可能會很費時,而且線程需要很長時間,當有更多的人請求資源時,服務器可能會掛斷
1。首先,上圖顯示了發(fā)送和使用消息的過程
2。首先,需要定義消息協(xié)議,如ActiveMQ、stomp、XMPP等。消息協(xié)議定義后,消息隊列需要滿足什么場景
是的,您需要保證消息的可靠性嗎?如果需要的話,您需要使存儲高度可用
您需要支持同步和異步消息
您需要確保消息的順序
您需要支持延遲消息
有關詳細信息,您可以參考許多開源實現(xiàn)功能。例如,rocketmq是高度可靠的,Kafka是高吞吐量的,但是它不是高度可靠的。
如何設計一個MQ消息隊列?
庫存被加載到緩存中,例如redis、基于redis的原子操作、庫存扣減和庫存驗證。
下單成功后,發(fā)送成功的訂單MQ,庫存系統(tǒng)消耗MQ扣減庫存。當然,消費者需要確保冪等。
樂觀鎖用于庫存系統(tǒng)的數(shù)據(jù)庫操作。