原文:https://segmentfault.com/a/1190000014108398#articleHeader1
消费者通常可以通过两种方式获取新消息:Push和Pull。Push方式:由ActiveMQ收到消息后主动调用消费者的新消息通知接口,需要消耗ActiveMQ宝贵的线程资源,同时消费者只能被动等待消息通知。Pull方式:由消费者轮询调用 ActiveMQ API 去获取消息,不消耗ActiveMQ 线程,消费者更加主动,虽然消费者的处理逻辑变得稍稍复杂。两种方式的根本区别在于线程消耗问题,由于ActiveMQ 的线程资源相对客户端更加宝贵,Push方式会占用ActiveMQ 过多的线程从而难以适应高并发的消息场景。同时当某一消费者离线一段时间再次上线后,大量积压消息处理会消耗大量ActiveMQ 线程从而拖累其它消费者的消息处理,所以Pull方式相对来说更好(Kafka消息中间件已经抛弃了PUSH模式,全面拥抱PULL模式)。
网友评论