在消息隊列中,消息堆積是生產(chǎn)環(huán)境中的需要考慮的問題,一旦消息產(chǎn)生積壓,來不及消費,可能會導(dǎo)致MQ服務(wù)器宕機,而解決消息積壓有這樣一些方案解決:
1.增加消費者數(shù)量
可以根據(jù)業(yè)務(wù)情況適當(dāng)添加多臺服務(wù)器部署消費者服務(wù)實例,消費者數(shù)量增加,可以有效提高消息的消費速度,但這需要考慮服務(wù)器成本
2.單個消費者中增加線程池來異步處理消息
單個消費者服務(wù)實例中,可以整合線程池,將消息的消費任務(wù)提交給線程池中的多個線程進行處理。但也存在需要考慮的問題,當(dāng)任務(wù)處理耗時比較長,任務(wù)比較多的情況下,線程會處于頻繁切換的狀態(tài),這對于CPU來說,是一種資源浪費,而且任務(wù)數(shù)量多,可能會導(dǎo)致線程池中的線程都處于使用狀態(tài),任務(wù)阻塞隊列達到瓶頸,這時候會觸發(fā)拒絕策略,對于不重要的消息的消息可以進行丟棄,重要的消息可以交給主線程處理,這時候又回到原始狀態(tài)。因此單個消費者增加線程池使用于任務(wù)耗時比較短,線程池可以很好處理消息任務(wù)的情況。文章來源:http://www.zghlxwxcb.cn/news/detail-513514.html
3.采用RabbitMQ提供的惰性隊列
在RabbitMQ中,提供了一種惰性隊列,所謂的惰性隊列是將消息從內(nèi)存快刷到磁盤,在犧牲性能的情況下保證MQ不會因為消息堆積而導(dǎo)致內(nèi)存爆滿。并且性能穩(wěn)定,支持百萬消息的磁盤快刷。定義惰性隊列也很簡單,只需要添加lazy熟悉即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-513514.html
@Bean
public Queue lazyQueue() {
return QueueBuilder
.durable("lazy.queue")
.lazy()
.build();
}
到了這里,關(guān)于RabbitMQ消息堆積方案處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!