专栏首页路人甲Java谈谈mq消息消费的几种方式

谈谈mq消息消费的几种方式

mq系列文章

对mq了解不是很多的,可以看一下下面两篇文章:

  1. 聊聊mq的使用场景
  2. 聊聊业务系统中投递消息到mq的几种方式
  3. 聊聊消息消费的几种方式
  4. 如何确保消息至少消费一次
  5. 如何保证消息消费的幂等性

本章内容

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

  1. push方式
  2. pull方式

push方式

消息消费的过程:

1. mq接收到消息

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

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

优点:

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

2. 消息实时性比较高:对于消费者来说,消息一旦到达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. 大家有什么看法,可以留言一起讨论,希望本文对你有所帮助

下章将讨论在如何确保消费者至少消费一次、消息消费的幂等性处理等通用的设计。

本文分享自微信公众号 - 路人甲Java(javacode2018),作者:路人甲Java

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 聊聊mq的使用场景

    将依赖于3个服务转换为只依赖于mq服务,只需要保证注册服务、mq服务高可用,即可以保证注册服务的高可用,相比保证其他3个服务高可用上容易了许多。

    路人甲Java
  • 聊聊业务系统中投递消息到mq的几种方式

    step5:新增一个定时器,轮询t_msg_record,将待发送的记录投递到mq中

    路人甲Java
  • java高并发系列 - 第34篇:google提供的一些好用的并发工具类

    关于并发方面的,juc已帮我们提供了很多好用的工具,而谷歌在此基础上做了扩展,使并发编程更容易,这些工具放在guava.jar包中。

    路人甲Java
  • Asp.Net Web API 2第七课——Web API异常处理

    阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.h...

    aehyok
  • 使用 Redis 如何实现点赞,取消点赞呢?

    本文基于 SpringCloud, 用户发起点赞、取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储。

    搜云库技术团队
  • 迄今最真实的GAN:英伟达渐进增大方式训练GAN,生成前所未有高清图像

    【新智元导读】昨天 NVIDIA Research 网站发布了一篇颇为震撼的GAN论文:Progressive Growing of GANs for Impr...

    新智元
  • 业界 | 提供免费计算资源,开发平台AI Studio零门槛实现AI能力

    AI Studio 是百度推出的一站式开发平台:一个囊括了 AI 教程、代码环境、算法算力、数据集,并提供免费的在线云计算的一体化编程环境。用户不必纠结于复杂的...

    机器之心
  • 学习 Kafka 入门知识看这一篇就够了!(万字长文)

    Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布...

    纯洁的微笑
  • 记移动平台崩溃卡顿的收集分析分享

    首先说一下项目背景,公司最近在做一个移动平台APP的开发,贴向于游戏方向,用户量也相对较大,加上项目中几个功能排期比较赶,导致开发中出来了不少问题,主要问题就是...

    小勇DW3
  • 真的,关于 Kafka 入门看这一篇就够了

    Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布...

    cxuan

扫码关注云+社区

领取腾讯云代金券