对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都是能够的