消息队列入门-1

消息队列入门

🤗什么是消息队列,为什么要学习消息队列?

消息队列(Message Queue,MQ)是一种跨进程通信或应用程序通信的机制,用于在分布式系统中传递消息。消息队列系统通常包含一个或多个生产者(producers)和一个或多个消费者(consumers),消息由生产者发送到队列中,并由消费者从队列中读取和处理。消息队列功能其实很容易理解,甚至通过名字就可以猜出他的功能;详细的作用如下:

🌭主要作用
  1. 解耦
    • 生产者和消费者解耦:生产者和消费者可以独立于彼此地进行开发、测试和部署。生产者只需要将消息发送到队列,而不需要关心谁会消费这些消息或何时消费。
    • 服务间解耦:服务A和服务B通过消息队列进行通信,服务A发送消息到队列中,服务B从队列中获取并处理消息。这样两者之间没有直接的依赖关系。
  2. 异步处理
    • 提高系统性能:生产者可以快速地将消息发送到队列中并立即返回,而不需要等待消费者处理完成。这样可以提高系统的响应速度和吞吐量。
    • 任务异步化:一些耗时操作可以通过消息队列异步处理,从而不阻塞主线程或主流程。
  3. 负载均衡
    • 均衡工作负载:多消费者从同一队列中读取消息,可以均衡工作负载,防止某个消费者过载。
    • 动态伸缩:可以根据队列中的消息量动态增加或减少消费者实例,实现负载均衡和自动伸缩。
  4. 可靠性
    • 持久化:消息可以被持久化到磁盘,确保在系统故障或重启后消息不会丢失。
    • 确认机制:消费者处理完消息后向消息队列发送确认,确保消息已被成功处理,未确认的消息可以被重新投递。
  5. 峰值削减
    • 平滑流量:通过消息队列,可以平滑地处理突发流量,将高峰期的任务均匀分摊到低峰期进行处理,避免系统过载。
  6. 数据流处理
    • 实时处理和分析:消息队列可以用于实时数据流处理和分析,如日志收集、监控数据处理、实时统计等。

说了这么多作用,那他具体的应用场景是怎么样的呢?

异步任务处理:如订单处理、邮件发送、短信通知等。

日志收集和处理:集中收集分布式系统的日志并进行处理和分析。

微服务通信:微服务之间通过消息队列进行通信,解耦微服务。

流数据处理:处理和分析实时流数据,如监控系统、实时统计、数据管道等。

负载均衡和削峰填谷:在高并发场景下,通过消息队列实现负载均衡和削峰填谷。

举个例子:
假设你有一个电子商务网站,当用户下单时,你需要执行多个耗时操作,如发送确认邮件、更新库存、通知物流等。如果这些操作在用户下单时同步执行,会导致用户等待时间过长。通过引入消息队列,可以将这些操作变为异步处理:

  1. 生产者(订单服务):用户下单后,订单服务将任务消息发送到消息队列中。
  2. 消费者(邮件服务、库存服务、物流服务):这些服务各自从消息队列中读取并处理相应的任务。

这样,用户在下单后立即得到确认,不需要等待所有后续操作完成,系统也能更好地处理高并发请求。

是不是很有意思?消息队列就是这样的一个功能;

对于几个比较热门的消息队列引擎优缺点分析;选入适合自己入门的;

1. Kafka

优点
  1. 高吞吐量:Kafka 能够处理大量的数据流,适合实时数据处理和分析。
  2. 分布式和水平扩展:Kafka 的设计易于扩展,可以在多台服务器上分布处理负载。
  3. 持久性和可靠性:通过将消息持久化到磁盘上,并复制到多个节点,确保数据的高可靠性。
  4. 广泛的生态系统:Kafka 具有丰富的工具和插件,如 Kafka Connect、Kafka Streams,用于数据集成和流处理。
  5. 支持多种客户端语言:Kafka 支持多种编程语言客户端,包括 Java、Python、Go 等。
缺点

复杂性:Kafka 的设置和管理相对复杂,需要较高的运维成本。

消息顺序:尽管 Kafka 保证分区内消息的顺序,但跨分区的全局顺序则不被保证。

资源消耗:Kafka 对内存和磁盘的需求较高,适合资源丰富的环境。

2. RabbitMQ

优点
  1. 易用性:RabbitMQ 的管理界面友好,配置和管理相对简单。
  2. 灵活的路由:支持多种消息路由模式,如直连、主题、广播等。
  3. 插件体系:RabbitMQ 提供了丰富的插件支持,可以扩展其功能。
  4. 事务和确认机制:支持消息确认和事务,确保消息的可靠性和一致性。
  5. 多语言支持:RabbitMQ 支持多种语言客户端,包括 Java、Python、Ruby 等。
缺点

性能瓶颈:对于高吞吐量的需求,RabbitMQ 的性能可能会成为瓶颈。

消息持久化开销:开启消息持久化会影响 RabbitMQ 的性能。

水平扩展限制:虽然 RabbitMQ 支持集群,但水平扩展性不如 Kafka 强。

3. Redis (作为消息队列)

优点
  1. 高性能:Redis 的内存存储使得消息传递非常快,适合高吞吐量的应用。
  2. 简单易用:配置和使用相对简单,适合快速开发和测试。
  3. 多功能:除了消息队列,Redis 还提供了丰富的数据结构和操作,可以实现多种缓存和存储需求。
  4. 持久化选项:支持快照和 AOF 持久化机制,确保数据的持久性。
缺点

内存限制:作为内存数据库,Redis 的消息队列功能受限于内存大小,适合短期和中小规模的消息处理。

功能限制:不如专门的消息队列系统功能全面,如复杂的路由和事务支持。

持久化性能:尽管支持持久化,但 Redis 的设计初衷不是持久化消息队列,在大规模持久化场景下性能可能受限。

其他还包括rocketMQ,activeMQ等,不在这里赘述;

其实通过比较各个引擎,最适合入门的还是rabbitMQ,操作简单一点,功能全面,新手初期也不太能遇到大数据量分布式场景…

注意:消息队列引擎更多是在分布式系统中使用,作为中大型项目的消息传递;

在单个系统中,其实使用channel,redis等就可以实现简单的类消息队列,已经可以满足开发需求。

介绍了这么多内容,就从rabbitMQ来进行入门吧!首先进行下载和安装:win10 安装rabbitMQ详细步骤_rabbitmq 安装-CSDN博客

可以按照这个教程做,写的很不错。
之后具体使用请查看我之后博客。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值