消息中间件在分布式以及高并发架构都是重要的内容,下面我就重点来详解消息中间件@mikechen
消息中间件定义
消息中间件(Message Middleware)是一种用于构建分布式系统的软件基础设施,它提供了一种异步、可靠、可伸缩的消息传递机制。
消息中间件应用场景
消息中间件的作用,主要包含如下4种:
1.异步通信
通过消息中间件,不同的服务之间可以进行异步通信,可以提高系统的吞吐量和并发性能,避免因为同步调用而导致的阻塞和性能瓶颈。
2应用解耦
消息中间件可以将消息发送方和接收方解耦,使得它们可以独立地进行开发和部署,不需要直接依赖于对方的实现细节。
3.流量控制
消息中间件可以设置流量控制,当消息流量过大时,可以暂停消息的发送,等到流量下降时再继续发送,从而平滑地处理流量峰值。
4.日志处理
消息中间件需要对关键信息进行日志记录和处理,以便于监控和追踪系统运行情况,发现潜在问题,优化系统性能。
消息中间件原理
消息中间件通常由生产者(Producer)、消息队列(Message Queue)、消费者(Consumer)三部分组成。
如下图所示:
上图为整体架构会涉及三类角色:
- 生产者:将消息发送到消息队列中;
- 消费者:从消息队列中获取消息并进行处理;
- 消息队列:作为消息传递的桥梁,负责存储和管理消息;
消息中间件提供多种消息传递模式如点对点模式和发布/订阅模式等。
1.点对点模型
在点对点模式中,生产者将消息发送到一个特定的消息队列中,消息队列只会将消息传递给一个消费者进行处理。
也就是说,一个消息只能被一个消费者处理,这种模式也称为队列模式(Queue Mode)。
如下图所示:
在点对点模式中,消息的生产者和消费者之间是一对一的关系,这种模式可以实现简单的异步通信和任务分配,适用于需要处理一些不需要广播的任务,如任务调度、订单处理等。
2.订阅发布模式
在订阅发布模式中,生产者将消息发布到一个主题(Topic)中,消费者可以订阅该主题并接收其中的消息。
在这种模式中,消息队列会将消息广播给所有订阅了该主题的消费者,也就是说,一个消息可以被多个消费者同时处理。这种模式也称为主题模式(Topic Mode)。
如下图所示:
消息中间件有哪些
下面是一些常见的消息中间件:
1.Apache Kafka
Kafka是一个分布式的高吞吐量的消息系统,最初由LinkedIn开发,现在是Apache软件基金会的顶级开源项目之一。
2.RabbitMQ
一个开源的 AMQP(高级消息队列协议)消息代理软件,支持多种消息协议和多种语言的客户端,并提供可靠性、灵活性和可扩展性等优势。
RabbitMQ是erlang语言开发,结合erlang语言本身的并发优势,RabbitMQ支持许多高级特性,例如消息确认、持久化、优先级、消息 TTL、消息复制和分片等。
3.ActiveMQ
一个完全基于 JMS(Java 消息服务)规范的消息中间件,支持多种消息协议和多种客户端语言,并提供高可用、可靠性、事务性等特性。
4.RocketMQ
RocketMQ是一个分布式的消息队列系统,由阿里巴巴集团开发并开源。
它具有高可用性、高吞吐量、高可靠性和可扩展性等特点,并且支持多种消息传递模式,例如发布/订阅、点对点等。
RocketMQ架构,如下图所示:
RocketMQ架构:主要由NameServer、Broker、Producer以及Consumer四部分构成。
关于RocketMQ架构原理,更加详细的内容请查看:RocketMQ架构原理详解(4大工作原理设计图解)
5.Pulsar
Pulsar是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台。
Pulsar被看作是云原生时代实时消息流传输、存储和计算最佳解决方案,其整体架构图如下所示:
6.Redis 消息队列
Redis除了可以用作分布式缓存,也可以用于消息队列的使用,支持多种消息协议和多种语言的客户端。
不同的消息中间件在设计思想、功能特性、适用场景等方面都有所差异,需要根据具体的需求和场景选择合适的消息中间件。
消息中间件选型
总的来说:
以上就是消息中间件详解,希望对你掌握消息中间件有所帮助。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》