190701-ActiveMQ中拉模式与推模式

ActiveMQ中拉模式与推模式

拉模式(点对点消息)

如果没有消费者在监听队列,消息将保留在队列中,直至消息消费者连接到队列为止。在这种模型中,消息不是自动推动给消息消费者的,而是要由消息消费者从队列中请求获得。

推模式(发布订阅消息)

  1. 在该模型中,消息会自动广播,消息消费者无须通过主动请求或轮询主题的方法来获得新的消息。
  2. 消息队列比较核心的应用场合有三个:解耦、异步和削峰
  3. 在消息队列中一种常用的消息推送类型是推拉模式

推拉模式对比

对比项 push模型 pull模型
描述 服务端主动发送数据到客户端 客户端主动从服务端拉取数据,通常客户端会定时拉取
定时性 较好,收到数据后即可发送给客户端 一般,取决于pull的间隔时间
服务端状态 需要保存push状态,哪些客户端已经发送成功,哪些发送失败 服务端无状态
客户端状态 无需额外保存状态 需要保存当前拉取信息的状态,以便于在故障或者重启的时候恢复
状态保存 集中式,集中在服务端 分布式,分散在客户端
负载均衡 服务端统一处理和控制 客户端之间分配,需要协调机制,比如 zk
其他 服务端需要做流量控制,无法最大化客户端处理能力,
其他在客户端故障情况下,无效的push对服务端有一定负载
客户端的请求可能是很多无效或者没有数据可供传输 ,浪费带宽和服务器处理能力
方案缺点 服务端的状态存储是个难点,可以将这些状态转移到DB或者key-value存储,来减轻server压力 针对实时性问题,可以将push加入进来,push小数据的通知信息,让客户端再来主动pull。
针对无效请求的问题,可以设置逐渐延长间隔时间的策略,以及合理设计协议尽量缩小请求数据包来节省带宽

具体的比较

Push模式

推模式是服务器端根据用户需要,由目的、按时将用户感兴趣的信息主动发送到用户的客户端

Push优点:

  1. 对用户要求低,方便用户获取需要的信息
  2. 及时性好,服务器端即使地向客户端推送更行的动态信息

Push缺点:

不能确保发送成功:Push模式采用广播方式,只有服务器端和客户端在同一个频道上,推模式才有效,用户才能接收到信息
没有信息状态跟踪:Push模式采用开环控制技术,一个信息推送后的状态,比如客户端是否接收等,无从得知
针对性较差:推送的信息可能并不能满足客户端的个性化需求。

Pull模式

拉模式是客户端主动从服务器端获取信息

Pull优点:

  1. 针对性强,能满足客户端的个性化需求
  2. 信息传输量较小,网络中传输的知识客户端的请求和服务器端对该请求的响应
  3. 服务器端的任务轻。服务器端只是被动接收查询,对客户端的查询请求做出响应

Pull缺点:

  1. 实时较差,针对于服务器端实时更新的信息,客户端难以获取实时信息
  2. 对于客户端用户的要求较高,需要对服务器端具有一定的了解。

参考资料

  1. ActiveMQ中拉模式与推模式
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×