网站首页 > java教程 正文
大家好,我是mikechen。
消息队列在大流量高并发的互联网场景非常的重要,而且大厂也特别喜欢考察,下面我就重点来详解消息队列@mikechen
本篇已经收纳于mikechen创作的《阿里架构师进阶专题合集》里面。
什么是消息队列?
消息队列是一种在应用程序之间或不同组件之间传递消息的通信模式,本质就是一个保存消息的队列。
如下图所示:
在消息队列中,消息的发送者将消息发送到一个队列中,而消息的接收者从队列中获取消息并进行处理。
发送者和接收者之间并不直接通信,它们之间通过共享的队列进行间接通信。
消息队列的特点
以下是消息队列的几个主要特点:
1.异步通信
消息队列支持异步通信模式,发送方将消息发送到队列中,而不需要等待接收方的即时响应。
这种异步通信模式允许发送方和接收方在处理消息时具有独立的时间表,提高了系统的可伸缩性和性能。
2.解耦和松散耦合
使用消息队列可以实现发送方和接收方之间的解耦,使它们可以独立进行开发和演进。
发送方只需将消息发送到队列,而不需要关心消息的接收方如何处理。,种松散耦合的设计提高了系统的灵活性和可维护性。
3.可靠性
消息队列通常提供持久化机制,确保消息在发送和接收过程中的可靠性。
即使在消息发送后,如果接收方暂时不可用,消息也会被保留在队列中,这种机制可以防止消息丢失,并提供了一种机制来处理系统中的故障和异常情况。
4.缓冲和削峰填谷
消息队列可以用作缓冲区,用于平衡消息的生产者和消费者之间的速度差异。
当消息的生产速度超过消费速度时,消息会在队列中暂时存储,以便消费者能够以自己的速度进行处理。这样可以平滑处理流量峰值,避免系统过载。
消息队列类型
消息队列主要包含两种:一个是点对点,一个是发布订阅模型。
1.点对点
点对点队列模型是一种一对一的消息传递模型,其中每个消息只能被一个接收者消费。
如下图所示:
发送者将消息发送到队列中,而接收者从队列中获取消息并进行处理,一旦消息被接收者消费,它将从队列中删除。
这种模型适用于需要可靠传递的消息,以及需要确保消息只被一个接收者处理的场景。
2.发布订阅
发布/订阅模型是一种一对多的消息传递模型,其中消息被发送到一个主题(Topic),而订阅该主题的所有接收者都会接收到该消息。
如下图所示:
发布订阅模型包含三个角色:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)。
发送者将消息发布到主题,而订阅者通过订阅感兴趣的主题来接收消息。
这种模型适用于需要将消息广播给多个接收者的场景,如实时广播、事件通知等。
常用的消息队列?
以下是一些常用的消息队列系统:
1.RabbitMQ
RabbitMQ 是一个开源的消息队列系统,它实现了 AMQP(Advanced Message Queuing Protocol)协议。
它具有可靠性、灵活性和丰富的功能,支持点对点和发布/订阅模型,提供持久化、消息确认、消息路由等特性。
2.Apache Kafka
Kafka 是一个高吞吐量、可持久化、分布式的消息队列系统,它被设计用于处理实时数据流和大规模数据处理,并具有高可用性和可扩展性。
Kafka 使用发布/订阅模型,将消息以日志的形式持久化,并支持分区和副本机制。
3.ActiveMQ
ActiveMQ 是一个基于 JMS(Java Message Service)规范的消息队列系统,ActiveMQ 具有可靠性、高性能和可扩展性,并支持多种客户端编程语言。
它提供了多种传输协议和消息模式的支持,包括点对点、发布/订阅和请求/应答模型。
4.RocketMQ
RocketMQ是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目。
5.Apache Pulsar
Pulsar 是一个分布式的消息和流处理平台,它具有高性能、可扩展性和持久化的特性。Pulsar 支持点对点和发布/订阅模型,并提供了多租户、多协议、容错性等功能。
以上
本篇已经收纳于mikechen创作的《阿里架构师进阶专题合集》里面。
- 上一篇: 消息队列之事务消息,RocketMQ 和 Kafka是如何做的?
- 下一篇: 常见的消息队列有哪些?
猜你喜欢
- 2024-11-18 常见的消息队列对比
- 2024-11-18 java中的延迟队列——Redis
- 2024-11-18 Java重试队列-让服务更健壮
- 2024-11-18 SpringBoot消息队列
- 2024-11-18 临近期末考试,一篇消息队列和RocketMQ的总结送给你们(二)
- 2024-11-18 一文了解字节跳动消息队列演进之路
- 2024-11-18 消息队列中,如何保证消息的顺序性?
- 2024-11-18 Java开发中常用的消息队列工具 ActiveMQ
- 2024-11-18 临近期末考试,一篇消息队列和RocketMQ的总结送给你们(一)
- 2024-11-18 消息队列挂了,Java环境下如何妥善处理事务消息
你 发表评论:
欢迎- 最近发表
-
- 搞趣网:我的世界全新皮肤包原始居民下载地址
- 我的世界拔刀剑MOD下载(我的世界拔刀剑mod下载国际版)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- 一些可以显著提高大型 Java 项目启动速度的尝试
- 常见的java敏感异常介绍(java 常见的异常)
- Java 开发者必看!三招实现外部 Jar 包动态加载(含热更新方案)
- Java JAR 启动内存参数配置指南:从基础设置到性能优化
- 对Spring MVC接口进行Mock测试(springmvc对外接口)
- 还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS
- 干掉OpenFeign,SpringBoot 3.0 自带的 HTTP 客户端真香!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)