分布式消息队列基础知识

简介: 本文概述了分布式消息队列的基本概念、组成、模式、基础与高级功能,以及它在业务开发中的应用和核心技术,为深入学习RocketMQ等消息队列组件提供基础知识。

前言

本文主要整理消息队列的一些基本概念,为后面的RocketMQ消息队列组件深入学习打下基础。

一、什么是消息队列?

维基百科介绍:消息队列(Message Queue)是一种不同进程间通信同一进程的不同线程间的通信方式。根据这个定义可知,消息队列主要有两类:

一类是内存中的消息队列,比如在Java语言中就包括ArrayBlockingQueue,LinkedBlockingQueue等等,他们是在同一个jvm进程中通信。他们主要是应用中的线程通信方式。

另外一类是分布式消息队列,比如常见的有Kafka,RibbitMQ,RocketMQ,ActiveMQ等等,他们主要是为不同的应用之间的通信。

由于在互联网的分布式应用部署环境下,分布式消息队列应用非常广泛,因此本文将讨论分布式消息队列的话题。

二、消息队列的组成

总共有三种角色:

1、生产者:负责发送消息到消息服务器

2、消息服务器broker:负责存储消息和分发消息,在分布式消息队列中一般命名为broker

3、消费者:接收消息服务器分发的消息,处理消息

三、消息队列模式

1、点对点模式,这种模式规定一条消息只能被一个消费者消费。

2、发布订阅模式,这种模式规定一条消息可以被多个消费者订阅消费。

四、消息队列的基础功能有哪些?

1、生产者发送消息

2、消息服务端消息存储与转发消息

3、消息消费者拉取或接收消息并消费处理消息

总的来说,生产者和消费者实现了异步通信,进行数据单向的传递,生产者向消费者端发送数据。

五、消息队列高级的功能有哪些?

1、消息服务器的高可用,横向扩展能力

2、消息高吞吐量,存储堆积消息能力

3、消息发送和消费消息重试机制

4、延迟或定时消息功能

5、顺序消息支持

6、事务型消息功能

7、多消息协议的支持,常见的消息协议如JMS(Java Message Service),AMQP(Advanced Message Queuing Protocol),MQTT(The Standard for IoT Messaging)

8、客户端多语言支持

9、消息过滤机制

10、消息回溯,按时间或者偏移量查找消息

11、管理台可视化管理支持

六、使用消息队列在业务开发中可以解决哪些问题?

1、系统之间异步通信,生产者发送消息不需要等待消费者消费消息的完成。

2、系统之间解耦,这里可以拿注册功能送积分的例子来说明,注册完整后只要发送一条消息到消息队列,积分服务消费该条注册消息来进行积分赠送,实现注册服务和积分服务的解耦。

3、流量削峰,主要是用来解决大流量请求击垮后台服务的问题,通过消息的先进先出特性和消息堆积能力,实现大流量承接。我工作中发票采集服务就使用这个功能来解决高峰期发票量大的问题。通过rocketmq来接收并存储大量发票消息,而发票数据的解析,持久化存储就开启消费者来消费。

4、消息广播功能,比如发票服务接收到新发票数据,需要通知到不同的业务服务,只要业务服务增加消费者就可以了,不需要修改生产者的功能。

七、消息队列的功能实现技术

1、通信框架,比如消息发送者和消费者都需要和消息服务器通信,常见的有基于事件驱动的netty异步通信框架进行实现。

2、编解码器,消息的发送过程中,消息内容涉及到编码,消费者消费消息前需要对消息进行解码,常见的有json序列化,protobuf序列化,hessain序列化。

3、消息持久化存储,可以基于数据库,文件来存储,

4、消息查询,需要用到索引和内存池,类似于mysql的innodb里的bufferpool,查询消息时减少io,借助操作系统的零拷贝技术,提升性能。

5、数据刷盘,使用线程池技术并行处理,比如发送消息场景,数据刷盘是比较耗时的操作,利用多线程异步刷盘,充分利用硬件资源,提升消息系统的吞吐量。

八、总结

本文介绍了分布式消息队列的基础概念,后续的文章将以RocketMQ为例,分析RocketMQ消息队列功能的细节,更加深入的掌握消息队列

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
消息中间件 存储 监控
RabbitMQ:分布式系统中的高效消息队列
RabbitMQ:分布式系统中的高效消息队列
|
6月前
|
消息中间件 存储 监控
消息队列:分布式系统中的重要组件
消息队列:分布式系统中的重要组件
|
6月前
|
消息中间件 Dubbo Java
Spring全家桶 、Dubbo、分布式、消息队列后端必备全套开源项目
基于 Spring Boot 2.X 版本的深度入门教程。 市面上的 Spring Boot 基础入门文章很多,但是深度入门文章却很少。对于很多开发者来说,入门即是其对某个技术栈的最终理解,一方面是开发者“比较懒”,另一方面是文章作者把 Spring Boot 入门写的太浅,又或者不够全面。
|
1月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
1月前
|
消息中间件 存储 监控
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
|
29天前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
3月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
3月前
|
消息中间件 存储 监控
消息队列在分布式系统中如何保证数据的一致性和顺序?
消息队列在分布式系统中如何保证数据的一致性和顺序?
|
4月前
|
消息中间件 缓存 架构师
对抗软件复杂度问题之降低代码的复杂度,如何解决
对抗软件复杂度问题之降低代码的复杂度,如何解决

热门文章

最新文章