摘要:消息隊(duì)列本來(lái)就是一種經(jīng)典的生產(chǎn)者與消費(fèi)者模式。為了最大效率的完成對(duì)消息隊(duì)列中的消息的消費(fèi),一般可以同時(shí)起多個(gè)一模一樣的消費(fèi)者,以并行的方式來(lái)拉取消息隊(duì)列中的消息。這樣的好處有多個(gè)加快處理消息隊(duì)列中的消息。
消息隊(duì)列本來(lái)就是一種經(jīng)典的生產(chǎn)者與消費(fèi)者模式。生產(chǎn)者向消息隊(duì)列中發(fā)送消息,消費(fèi)者從消息隊(duì)列中獲取消息來(lái)消費(fèi)。
消息的傳送一般由一個(gè)代理來(lái)實(shí)現(xiàn)的,那就是Message broker(即消息代理)。Message broker有兩大職責(zé),一是消息路由,二是數(shù)據(jù)轉(zhuǎn)換。這就好比A給B寄信,如果不使用郵局的話,就要自己想辦法送達(dá),費(fèi)時(shí)費(fèi)力,而通過(guò)郵局的話,只要B的地址在郵局中注冊(cè)過(guò),那么天涯海角也能送達(dá)。這里的郵局扮演的角色就像消息系統(tǒng)中的Message broker。
眾所周知,消息隊(duì)列是典型的’send and forget’原則的體現(xiàn),生產(chǎn)者只管發(fā)送,不管消息的后續(xù)處理。為了最大效率的完成對(duì)消息隊(duì)列中的消息的消費(fèi),一般可以同時(shí)起多個(gè)一模一樣的消費(fèi)者,以并行的方式來(lái)拉取消息隊(duì)列中的消息。這樣的好處有多個(gè):
1.加快處理消息隊(duì)列中的消息。
2.增強(qiáng)穩(wěn)定性,如果一個(gè)消費(fèi)者出現(xiàn)問(wèn)題,不會(huì)影響對(duì)消息隊(duì)列中消息的處理。
使用spring JMS來(lái)配置多個(gè)Listener實(shí)例,只需配置MessageListenerContainer就行。
多配置一個(gè)屬性concurrentConsumers,設(shè)置值為4,就是同時(shí)啟動(dòng)4個(gè)Listener實(shí)例來(lái)消費(fèi)消息。
使用MessageSender來(lái)發(fā)送100條消息,可以檢查消息處理的順序會(huì)發(fā)生變化。
for (int i = 0; i < 100; i++) { messageSender.send(String.format("message %d",i)); }
運(yùn)行結(jié)果如下:
... Received: message 4 Received: message 7 Received: message 6 Received: message 5 Received: message 8 Received: message 10 Received: message 9 …
除了設(shè)置一個(gè)固定的Listener數(shù)量,也可以設(shè)置一個(gè)Listener區(qū)間,這樣MessageListenerContainer可以根據(jù)消息隊(duì)列中的消息規(guī)模自動(dòng)調(diào)整并行數(shù)量。
這次使用的是concurrency屬性,4-8表示最小并發(fā)數(shù)是4,最大并發(fā)數(shù)為8,當(dāng)然也可以給一個(gè)固定值,比如5,這樣就相當(dāng)于concurrentConsumers屬性了。
http://blog.csdn.net/super_sc...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70220.html
摘要:利用的高級(jí)特性特性是一種負(fù)載均衡的機(jī)制。在一個(gè)消息被分發(fā)到之前,首先檢查消息屬性。屬性為某個(gè)值的消息單個(gè)消息或消息集合在描述,和的對(duì)應(yīng)關(guān)系,以及負(fù)載均衡策略時(shí)。同樣做到了保證消息的順序情況下,均衡消費(fèi)的消費(fèi)消息。 通常mq可以保證先到隊(duì)列的消息按照順序分發(fā)給消費(fèi)者消費(fèi)來(lái)保證順序,但是一個(gè)隊(duì)列有多個(gè)消費(fèi)者消費(fèi)的時(shí)候,那將失去這個(gè)保證,因?yàn)檫@些消息被多個(gè)線程并發(fā)的消費(fèi)。但是有的時(shí)候消息按照...
摘要:嵌入在一些項(xiàng)目中,單獨(dú)開(kāi)啟一個(gè),對(duì)于項(xiàng)目實(shí)施來(lái)說(shuō)有時(shí)略顯繁瑣。待啟動(dòng)后,選擇所在的進(jìn)程。連接后選擇頁(yè)簽紅框的地方分別為已消費(fèi)和已進(jìn)入中的消息的條數(shù)。 ActiveMQ 嵌入Tomcat 在一些項(xiàng)目中,單獨(dú)開(kāi)啟一個(gè)ActiveMQ,對(duì)于項(xiàng)目實(shí)施來(lái)說(shuō)有時(shí)略顯繁瑣。所以我們將ActiveMQ內(nèi)嵌到Tomcat,Tomcat啟動(dòng)同時(shí)就順帶啟動(dòng)了ActiveMQ。由此我們需要掌握三個(gè)個(gè)重要的知識(shí)...
摘要:中間件的分類基于遠(yuǎn)程過(guò)程調(diào)用的中間件?;趯?duì)象請(qǐng)求代理的中間件。消息傳遞指的是程序之間通過(guò)在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過(guò)直接調(diào)用彼此來(lái)通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過(guò)程調(diào)用的技術(shù)。 一.中間件 1.1 什么是中間件? 由于業(yè)務(wù)、機(jī)構(gòu)和技術(shù)是不斷變化的,因此為其服務(wù)的軟件系統(tǒng)必須適應(yīng)這樣的變化。在合并、添加服務(wù)或擴(kuò)展可用服務(wù)之后,公司可能無(wú)力負(fù)擔(dān)重新創(chuàng)建信息系統(tǒng)所需的成本。正是在...
閱讀 2805·2021-11-17 09:33
閱讀 4484·2021-09-22 15:57
閱讀 2879·2019-08-30 14:16
閱讀 3143·2019-08-29 14:07
閱讀 2421·2019-08-26 11:55
閱讀 3435·2019-08-23 17:07
閱讀 1734·2019-08-23 16:50
閱讀 2545·2019-08-23 16:08