消息中间件最全详解(万字图文总结)

消息中间件最全详解(万字图文总结)-mikechen

消息中间件在分布式以及高并发架构都是重要的内容,下面我就重点来详解消息中间件@mikechen

消息中间件定义

消息中间件(Message Middleware)是一种用于构建分布式系统的软件基础设施,它提供了一种异步、可靠、可伸缩的消息传递机制。

 

消息中间件应用场景

消息中间件的作用,主要包含如下4种:

消息中间件最全详解(万字图文总结)-mikechen

1.异步通信

通过消息中间件,不同的服务之间可以进行异步通信,可以提高系统的吞吐量和并发性能,避免因为同步调用而导致的阻塞和性能瓶颈。

消息中间件最全详解(万字图文总结)-mikechen

 

2应用解耦

消息中间件可以将消息发送方和接收方解耦,使得它们可以独立地进行开发和部署,不需要直接依赖于对方的实现细节。

消息中间件最全详解(万字图文总结)-mikechen

 

3.流量控制

消息中间件可以设置流量控制,当消息流量过大时,可以暂停消息的发送,等到流量下降时再继续发送,从而平滑地处理流量峰值。

消息中间件最全详解(万字图文总结)-mikechen

 

4.日志处理

消息中间件需要对关键信息进行日志记录和处理,以便于监控和追踪系统运行情况,发现潜在问题,优化系统性能。

消息中间件最全详解(万字图文总结)-mikechen

 

消息中间件原理

消息中间件通常由生产者(Producer)、消息队列(Message Queue)、消费者(Consumer)三部分组成。

如下图所示:

消息中间件最全详解(万字图文总结)-mikechen

上图为整体架构会涉及三类角色:

  1. 生产者:将消息发送到消息队列中;
  2. 消费者:从消息队列中获取消息并进行处理;
  3. 消息队列:作为消息传递的桥梁,负责存储和管理消息;

消息中间件提供多种消息传递模式如点对点模式和发布/订阅模式等。

1.点对点模型

在点对点模式中,生产者将消息发送到一个特定的消息队列中,消息队列只会将消息传递给一个消费者进行处理。

也就是说,一个消息只能被一个消费者处理,这种模式也称为队列模式(Queue Mode)。

如下图所示:

消息中间件最全详解(万字图文总结)-mikechen

在点对点模式中,消息的生产者和消费者之间是一对一的关系,这种模式可以实现简单的异步通信和任务分配,适用于需要处理一些不需要广播的任务,如任务调度、订单处理等。

 

2.订阅发布模式

在订阅发布模式中,生产者将消息发布到一个主题(Topic)中,消费者可以订阅该主题并接收其中的消息。

在这种模式中,消息队列会将消息广播给所有订阅了该主题的消费者,也就是说,一个消息可以被多个消费者同时处理。这种模式也称为主题模式(Topic Mode)。

如下图所示:

消息中间件最全详解(万字图文总结)-mikechen

 

消息中间件有哪些

下面是一些常见的消息中间件:

1.Apache Kafka

消息中间件最全详解(万字图文总结)-mikechen

Kafka是一个分布式的高吞吐量的消息系统,最初由LinkedIn开发,现在是Apache软件基金会的顶级开源项目之一。

Kafka广泛应用于多种用例,例如实时数据流处理、日志聚合、监控、指标和日志收集、消息队列等。

Kafka的基本模型是生产者向主题(Topic)发布消息,消费者从主题订阅消息。

消息通过一个或多个Kafka集群的代理(Broker)进行传输和存储,如下图所示:

消息中间件最全详解(万字图文总结)-mikechen

 

2.RabbitMQ

消息中间件最全详解(万字图文总结)-mikechen

一个开源的 AMQP(高级消息队列协议)消息代理软件,支持多种消息协议和多种语言的客户端,并提供可靠性、灵活性和可扩展性等优势。

RabbitMQ是erlang语言开发,结合erlang语言本身的并发优势,RabbitMQ支持许多高级特性,例如消息确认、持久化、优先级、消息 TTL、消息复制和分片等。

 

3.ActiveMQ

消息中间件最全详解(万字图文总结)-mikechen

一个完全基于 JMS(Java 消息服务)规范的消息中间件,支持多种消息协议和多种客户端语言,并提供高可用、可靠性、事务性等特性。

 

4.RocketMQ

消息中间件最全详解(万字图文总结)-mikechen

RocketMQ是一个分布式的消息队列系统,由阿里巴巴集团开发并开源。

它具有高可用性、高吞吐量、高可靠性和可扩展性等特点,并且支持多种消息传递模式,例如发布/订阅、点对点等。

RocketMQ架构,如下图所示:

消息中间件最全详解(万字图文总结)-mikechen

RocketMQ架构:主要由NameServer、Broker、Producer以及Consumer四部分构成。

关于RocketMQ架构原理,更加详细的内容请查看:RocketMQ架构原理详解(4大工作原理设计图解)

 

 5.Pulsar

消息中间件最全详解(万字图文总结)-mikechen

Pulsar是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台。

Pulsar被看作是云原生时代实时消息流传输、存储和计算最佳解决方案,其整体架构图如下所示:

消息中间件最全详解(万字图文总结)-mikechen

 

6.Redis 消息队列

Redis除了可以用作分布式缓存,也可以用于消息队列的使用,支持多种消息协议和多种语言的客户端。

不同的消息中间件在设计思想、功能特性、适用场景等方面都有所差异,需要根据具体的需求和场景选择合适的消息中间件。

 

消息中间件选型

总的来说:

  1. 电商、金融等对事务性要求很高的,可以考虑RocketMQ
  2. 技术挑战不是特别高,用 RabbitMQ是不错的选择。
  3. 如果是大数据领域的实时计算、日志采集等场景可以考虑 Kafka

以上就是消息中间件详解,希望对你掌握消息中间件有所帮助。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法