3、n>ConnectionFactory修改為:4、operty>
解決activemq多消費(fèi)者并發(fā)處理遇到一個(gè)現(xiàn)象,如果activemq隊(duì)列積壓了數(shù)據(jù)的話,如果在spring中啟動(dòng)listner,只有一個(gè)consumer執(zhí)行,查閱了很多資料,無果,后來偶爾通過activemq的監(jiān)控網(wǎng)頁看到消費(fèi)者列表中,只有一個(gè)消費(fèi)者有等待處理的數(shù)據(jù),其他都沒有,如下圖:由此得知,activemq有一定機(jī)制將隊(duì)列中的數(shù)據(jù)交給consumer處理,這個(gè)機(jī)制就是數(shù)據(jù)的數(shù)量分配,查資料得知,默認(rèn)是1000,因此,把這個(gè)值調(diào)小就可以了。在客戶端的連接url中,修改為tcp://ipaddr
5、:61616?jms.prefetchPolicy.all=2這樣基本消費(fèi)者就分配公平了,不會(huì)出現(xiàn)一個(gè)消費(fèi)者忙死,另外的消費(fèi)者閑死了。為高并發(fā)程序部署ActiveMQ使用ActiveMQ來擴(kuò)展你的應(yīng)用程序需要一些時(shí)間并要花一些精力.本節(jié)中我們將介紹三種技術(shù)用于擴(kuò)展應(yīng)用程序.我們將從垂直擴(kuò)展開始,這種擴(kuò)展方式中,單個(gè)代理需要處理成千上萬的連接和消息隊(duì)列.接下來我們將介紹水平擴(kuò)展,這種擴(kuò)展方式需要處理比前一種方式更多的網(wǎng)絡(luò)連接.最后,我們介紹的傳輸負(fù)載分流,可以在擴(kuò)展和性能間得到平衡,但是會(huì)增加ActiveMQ程序的復(fù)雜性.1.垂
6、直擴(kuò)展:垂直擴(kuò)展是一種用于增加單個(gè)ActiveMQ代理連接數(shù)(因而也增加了負(fù)載能力)的技術(shù).默認(rèn)情況下,ActiveMQ的被設(shè)計(jì)成盡可高效的傳輸消息以確保低延遲和良好的性能.但是,你也可以進(jìn)行一些配置使的ActiveMQ代理可以同時(shí)處理大量并發(fā)的連接以及大量的消息隊(duì)列.默認(rèn)情況下,ActiveMQ使用阻塞IO來處理傳輸連接,這種方式為每一個(gè)連接分配一個(gè)線程.你可以為ActiveMQ代理使用非阻塞IO(同時(shí)客戶端可以使用默認(rèn)的傳輸)以減少線程的使用.可以在ActiveMQ的配置文件中通過傳輸連接器配置非阻塞IO.下面的是配置非阻
7、塞IO的示例代碼:配置NIO傳輸連接器除了為每個(gè)連接使用一個(gè)線程的阻塞IO,ActiveMQ還可以為每一個(gè)客戶端連接使用一個(gè)消息分發(fā)線程.你可以通過將系統(tǒng)參數(shù)org.apache.activemq.UseDedicatedTaskRunner設(shè)置為false來設(shè)置ActiveMQ使用一個(gè)搞線程
8、池.下面是一個(gè)示例:ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false"確保ActiveMQ代理用于足夠的內(nèi)存來處理大量的并發(fā)連接,需要分兩步進(jìn)行:首先,你需要確保運(yùn)行ActiveMQ的JVM在啟