• 聊聊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,获取年薪50万课程,获取最新文章。

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/itsoku123/p/10817731.html
Copyright © 2020-2023  润新知