[转] 谈谈mq消息消费的2种方式

摘要:
从消费者的角度出发,本章分析了两种消息消费方式:推送模式-拉送模式-推送模式消息消费过程:mq接收消息,mq主动将消息推送给消费者,mq属于主动方,消费者属于被动消费。消息到达mq后,将触发mq推送机制,将消息推送给消费者,而不管消费者的状态如何。

本章内容

从消费者的角度出发,分析一下消息消费的两种方式:

  • push方式
  • pull方式

push方式

消息消费的过程:

  1. mq接收到消息

  2. mq主动将消息推送给消费者(消费者需提供一个消费接口)

mq属于主动方,消费者属于一种被动消费,一旦有消息到达mq,会触发mq推送机制,将消息推送给消费者,不管消费者处于何种状态。

优点:

消费者代码较少:对于消费者来说,只需提供一个消费接口给mq即可;mq将接收到的消息,随即推送到指定的消费接口

消息实时性比较高:对于消费者来说,消息一旦到达mq,mq会立即推送给消费者

缺点:

1.消费者属于被动方,消息量比较大时,对消费者性能要求比较高;若消费者机器资源有限,可能会导致压力过载,引发宕机的情况。

2.对消费者可用性要求比较高:当消费者不可用时,会导致很push失败,在mq方需要考虑至少推送成功一次,这块的设计下章节会做说明。

pull方式

消息消费的过程:

  1. 消费端采用轮询的方式,从mq服务中拉取消息进行消费
  2. 消费完成通知mq删除已消费成功的消息
  3. 继续拉取消息消费

对于消费者来说,是主动方,可以采用线程池的方式,根据机器的性能来增加或缩小线程池的大小,控制拉取消息的速度,可以很好的控制自身的压力。

优点:

  1. 消费者可以根据自己的性能主动控制消息拉去的速度,控制自己的压力,不至于把自己弄跨
  2. 实时性相对于push方式会低一些
  3. 消费者属于主动方,控制权更大一些

缺点:

  1. 消费方需要实现消息拉取的代码
  2. 消费速度较慢时,可能导致mq中消息积压,消息消费延迟等

总结

  1. 消费者性能较好,对实时性要求比较高的,可以采用push的方式
  2. 消费者性能有限,建议采用pull的方式
  3. 整体上来说,主要在于消费者的性能,机器的性能如果没有问题,push和pull都是可以的
  4. 大家有什么看法,可以留言一起讨论,希望本文对你有所帮助

MQ系列整个内容,我们将讨论:

【转载自:原文地址

免责声明:文章转载自《[转] 谈谈mq消息消费的2种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Flume日志收集如何将txt中的数据整理到Matlab中画图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

domino控制台命令

Broadcast message 向该服务器的用户广播消息 Broadcast message usernames 向该服务器的某一用户广播消息 Dbcache Flush 关闭当前在数据库高速缓存中打开的所有数据库。使用此命令可以在高速缓存中维护数据库,例如:备份或恢复数据库。 Drop username 关闭一个或多个服务器会话。如果...

1-rocketmq简介-部署

简介 基于java开发,高可用 应用场景 1、应用解耦 2、流量销峰 3、异步处理 4、消息分发(邮件、短信、日志、数据处理) 延时队列场景:需要延时单次延迟执行的场景,比如订单取消 常见问题 1、如何保证高可用 集群部署 2、如何保证消息不丢失(消息的可靠性传输) 生产者丢失数据 开启生产者确认模式,确认发送成功了才对消费者可见 消息队列丢失数据...

Canal使用小结

Canal使用小结 之前公司存在mysql数据同步mongo的需求,可以有多种实现方式,比如硬编码,发送消息等。公司选择的是Canal中间件,最近有空来研究下他的使用方式,对于mysql数据变更监听有需求的应用场景都可以使用它。 参考:https://yq.aliyun.com/articles/14570 Canal介绍 基于mysql数据库binl...

EMQ X 规则引擎系列(十四)- 桥接消息到 Pulsar

Pulsar 消息系统介绍 Apache Pulsar 是一个企业级的发布订阅(pub-sub)消息系统,Pulsar 旨在取代 Apache Kafka 多年的主宰地位。Pulsar 在很多情况下提供了比 Kafka 更快的吞吐量和更低的延迟,并为开发人员提供了一组兼容的 API。 Pulsar 将高性能的流和灵活的传统队列结合到一个统一的消息模型和 A...

Spring Cloud Stream

1 前言 在实际的企业开发中,消息中间件是至关重要的组件之一。消息中间件主要解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性的架构。不同的中间件其实现方式,内部结构是不一样的。如常见的RabbitMQ和Kafka,由于这两个消息中间件的架构上的不同,如RabbitMQ有Exchange,Kafka有Topic、Partitio...

springMVC-错误消息的显示和国际化

显示:在页面添加<form:errors path="*">会把错误消息集中显示在一块 在页面添加<form:errors path="lastname">可以显示在对应字段的后面,分开显示 提示消息的国际化 * 每个属性在数据绑定和数据校验发生错误时,都会生成一个对应的Fielderror 对象。 * 当一个属性校验失败后,校验框...