分布式消息队列基础知识

本文介绍了消息队列的基本概念,包括内存和分布式消息队列的类型,以及角色(生产者、消息服务器和消费者)。重点讨论了分布式消息队列的点对点和发布订阅两种模式,基础功能如发送、存储和消费消息,以及高级特性如高可用、消息重试等。同时,阐述了消息队列在业务开发中解决异步通信、系统解耦、流量削峰等问题的作用,并提及其实现技术,如通信框架、编解码和消息持久化。最后,预告将通过Rocketmq实例深入探讨消息队列的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一、什么是消息队列?

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

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

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

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

二、消息队列的组成

总共有三种角色:

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

2、消息服务器:负责存储消息和分发消息,在分布式消息队列中一般命名为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消息队列功能的细节,更加深入的掌握消息队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

服务端技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值