對mq瞭解不是不少的,能夠看一下下面兩篇文章:ide
從消費者的角度出發,分析一下消息消費的兩種方式:性能
mq接收到消息線程
mq屬於主動方,消費者屬於一種被動消費,一旦有消息到達mq,會觸發mq推送機制,將消息推送給消費者,無論消費者處於何種狀態。設計
消費者代碼較少:對於消費者來講,只需提供一個消費接口給mq便可;mq將接收到的消息,隨即推送到指定的消費接口接口
1.消費者屬於被動方,消息量比較大時,對消費者性能要求比較高;若消費者機器資源有限,可能會致使壓力過載,引起宕機的狀況。資源
2.對消費者可用性要求比較高:當消費者不可用時,會致使很push失敗,在mq方須要考慮至少推送成功一次,這塊的設計下章節會作說明。get
1.消費端採用輪詢的方式,從mq服務中拉取消息進行消費it
2.消費完成通知mq刪除已消費成功的消息class
3.繼續拉取消息消費線程池
對於消費者來講,是主動方,能夠採用線程池的方式,根據機器的性能來增長或縮小線程池的大小,控制拉取消息的速度,能夠很好的控制自身的壓力。
1.消費者能夠根據本身的性能主動控制消息拉去的速度,控制本身的壓力,不至於把本身弄跨
2.實時性相對於push方式會低一些
3.消費者屬於主動方,控制權更大一些
1.消費方須要實現消息拉取的代碼
2.消費速度較慢時,可能致使mq中消息積壓,消息消費延遲等
消費者性能較好,對實時性要求比較高的,能夠採用push的方式
消費者性能有限,建議採用pull的方式
總體上來講,主要在於消費者的性能,機器的性能若是沒有問題,push和pull都是能夠的