問(wèn)題
最近在項(xiàng)目中使用了 activemq 進(jìn)行消息的異步傳遞,只有一個(gè)消費(fèi)者時(shí),系統(tǒng)可以正常運(yùn)行啊胶,但當(dāng)增加多個(gè)消費(fèi)者時(shí),卻只有一個(gè)消費(fèi)者進(jìn)行消費(fèi)垛贤,其他的消費(fèi)者不消費(fèi)焰坪。
activemq 有一個(gè)機(jī)制,叫消息預(yù)讀取南吮,這個(gè)機(jī)制默認(rèn)會(huì)讀取 1000 條消息發(fā)往一個(gè)消費(fèi)者中琳彩,當(dāng)超過(guò) 1000 消息堆積時(shí),才會(huì)繼續(xù)讀取剩下的消息發(fā)往另一個(gè)消費(fèi)者中。當(dāng)只有一個(gè)消費(fèi)者時(shí)露乏,這個(gè)機(jī)制可以提高效率碧浊,但有多個(gè)消費(fèi)者時(shí),就不合適了瘟仿,會(huì)導(dǎo)致其他消費(fèi)者閑置箱锐。
在客戶端的連接上,拼接jms.prefetchPolicy.all=xxx劳较,就可以調(diào)整消息預(yù)讀取條數(shù)驹止,當(dāng)有多個(gè)消費(fèi)者時(shí),可以適當(dāng)?shù)恼{(diào)低這個(gè)參數(shù)观蜗,保證其他消費(fèi)者也可以消費(fèi)到臊恋,從而提高消費(fèi)速度。
完整的連接示例(以 spring boot 為例):
1
spring.activemq.broker-url=tcp://localhost:61616?jms.prefetchPolicy.all=2