消息中间件需要解决什么问题?

消息中间件需要解决什么问题?


Publish/Subscribe(发布/订阅)

发布订阅是消息中间件最基本的功能。

Message Priority(消息优先级)

在一个消息队列中,每条消息都有不同的优先级,一般用整数描述,优先级高的消息先投递,如果消息完全在一个内存队列,那么在投递前可以按照优先级排序,令优先级高的先投递。
RocketMQ所有的消息都是持久化的,所以如果按照优先级排序,开销非常大,智能通过变通的形式实现类似功能,即配置一个单独的有限队列和一个普通队列,不同优先级的发送到不同队列。

Message Order(消息有序)

消息有序指的是一类消息消费时,能按照发送的顺序来消费。比如一个订单产生3条消息,订单创建、付款、完成。消费时,需要按照这个消费顺序才有意义。但订单之间是可以并行消费的。

Message Filter(消息过滤)

Broker端消息过滤,减少Consumer无用消息的网络传输。
Comsumer端消息过滤,由应用自定义。

Message Persistence(消息持久化)

持久化部分的性能,直接决定了整个消息中间件的性能。

一般通常采用几种持久化方式:

  1. 持久化到数据库
  2. 持久化到KV存储
  3. 文件记录
  4. 对内存数据坐持久化镜像

Message Reliablity(消息可靠性)

影响消息可靠性的几种情况:

  1. Broker正常关闭
  2. Broker异常Crash
  3. OS Crash
  4. 机器掉电,但是能立即恢复
  5. 机器无法开机(可能是关键设备损坏)
  6. 磁盘损坏

LowLatencyMessaging(低延时消息)

在消息不堆积的情况下,消息到达Broker后,能立刻到达Consumer。
RocketMQ使用长轮训拉取,可以保证消息实时性。

AtLeastOnce(至少消费一次)

消费者将消息pull到本地,消费完成后,才向服务器返回。

ExactlyOnlyOnce(消息不重复)

消费者和服务者,不重复消费或发送消息。

Broker的Buffer满了怎么办

持久化磁盘,定期清楚。

回溯消费

消费者已经成功的消费了消息,由于业务需要重新消费消息。

消息堆积

消息堆积可以挡住前端的数据洪峰,相对于大坝的功能

分布式事物

定时消息

指消息发到Broker后,不能立刻被消费者消费,需要到特定的时间后才能被消费

消息重试

Consumer消费消息失败后, 要提供重试机制,让消息再消费一次