初探消息队列 | 青训营笔记

76 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第8天

前言

在web后端开发的学习过程中,消息队列是绕不开的。消息队列可实现非阻塞 I/O,以及实现异步通信,可以帮助改善应用程序的性能和可伸缩性。可以有效解决系统崩溃,服务能力有限,链路耗时较长等问题,并且也可以处理日志。

消息队列简介

消息队列可以用来实现应用程序之间的通信,它允许一个应用程序将信息发送到另一个应用程序,而无需了解发送者和接收者之间的详细信息。此外,消息队列还可以用来改善应用程序的可伸缩性,因为它允许应用程序在网络中发送大量的消息,而无需建立密集的连接。它还可以改善服务的可用性,因为它允许持久的消息传递,即使发送方或接收方中断服务,消息也不会丢失。
消息队列支持高吞吐,高并发,并且高可用。在互联网产品里面使用非常广泛。

消息队列的常用框架

  • ActiveMQ:ActiveMQ是一个基于Java的开源消息系统,允许应用程序之间使用简单的、便捷的消息服务来交换数据。它还支持多种通信协议,如HTTP、Stomp、OpenWire等,可以与多种语言平台进行集成。
  • RabbitMQ:RabbitMQ是一个功能强大、健壮的消息代理,提供多种消息传输协议,支持分布式部署以及高可用性,可用于在云环境中部署API网关、微服务架构和移动应用程序。
  • Kafka:Apache Kafka是一种商业级的分布式流式平台,可用于数据处理、日志管理、实时分析和记录处理。它具有良好的可扩展性、可靠性和性能,可以建立实时、精确和高吞吐量的数据流管道。
  • RocketMQ:RocketMQ是由Facebook出品的用于构建分布式可靠消息传递系统的中间件,它被设计用来替换传统的消息队列(如RabbitMQ),并改进了消息发送的性能,运行时的稳定性,有效的资源使用和故障转移。

部分框架的架构以及特点

  • Kafka的架构由一个分布式的消息传递系统组成,它由一个或多个生产者(Producer)发送数据,一个或多个消费者(Consumer)接收数据,以及一个或多个额外的代理(Broker)来连接生产者和消费者。Kafka有自己的分布式文件系统,消息代理可以使用分布式存储来管理和保存数据,而不需要基础架构的支持。Kafka的核心是可扩展的消息传递平台,可以处理大量数据,同时具有低延迟和高可用性。Kafka的消息拥有可靠性,因为它可以有效地控制消费者的进度,并确保至少一次处理消息。
  • RocketMQ架构有3个重要的组件:NameServer,Broker 和Producer / Consumer,它们共同构成消息的发送和接收流程。 NameServer负责管理所有的Broker,同时客户端Producer和Consumer也会把自己注册到NameServer上。Broker负责接收来自Producer的消息,并存储到磁盘中,它也负责接收Consumer发来的请求,以消费之前存储的消息。Producer/Consumer是用户使用RocketMQ的终端,Producer发送消息到某个Topic,Consumer接收消息来自某个Topic。

总结与思考

个人感觉消息队列的重要性不亚于redis,在很多业务场景都有所使用。可以作为重点学习。对于我个人而言,也应该加强这方面的学习,最好还是写代码多加练习。继续学习,Fighting!