全部产品
云市场

顺序消息

更新时间:2019-09-13 20:34:12

本文介绍消息队列 MQ 顺序消息的概念、适用场景以及使用过程中的注意事项。

顺序消息(FIFO 消息)是消息队列 MQ 提供的一种严格按照顺序来发布和消费的消息。顺序发布和顺序消费是指对于指定的一个 Topic,生产者按照一定的先后顺序发布消息;消费者按照既定的先后顺序订阅消息,即先发布的消息一定会先被客户端接收到。

顺序消息分为全局顺序消息分区顺序消息

全局顺序消息

对于指定的一个 Topic,所有消息按照严格的先入先出(FIFO)的顺序来发布和消费。

适用场景

适用于性能要求不高,所有的消息严格按照 FIFO 原则来发布和消费的场景。

示例

在证券处理中,以人民币兑换美元为 Topic,在价格相同的情况下,先出价者优先处理,则可以按照 FIFO 的方式发布和消费全局顺序消息。

分区顺序消息

对于指定的一个 Topic,所有消息根据 Sharding Key 进行区块分区。同一个分区内的消息按照严格的 FIFO 顺序进行发布和消费。Sharding Key 是顺序消息中用来区分不同分区的关键字段,和普通消息的 Key 是完全不同的概念。

适用场景

适用于性能要求高,以 Sharding Key 作为分区字段,在同一个区块中严格地按照 FIFO 原则进行消息发布和消费的场景。

示例

  • 用户注册需要发送发验证码,以用户 ID 作为 Sharding Key,那么同一个用户发送的消息都会按照发布的先后顺序来消费。

  • 电商的订单创建,以订单 ID 作为 Sharding Key,那么同一个订单相关的创建订单消息、订单支付消息、订单退款消息、订单物流消息都会按照发布的先后顺序来消费。

阿里巴巴集团内部电商系统均使用分区顺序消息,既保证业务的顺序,同时又能保证业务的高性能。

全局顺序与分区顺序对比

在控制台创建顺序消息使用的不同类型 Topic 对比如下。

消息类型对比

Topic 的消息类型 是否支持事务消息 是否支持定时/延时消息 性能
无序消息(普通、事务、定时/延时消息) 最高
分区顺序消息
全局顺序消息 一般

发送方式对比

消息类型 是否支持可靠同步发送 是否支持可靠异步发送 是否支持 Oneway 发送
无序消息(普通、事务、定时/延时消息)
分区顺序消息
全局顺序消息

注意事项

使用顺序消息时,请注意以下几点:

  • 顺序消息暂不支持广播模式。
  • 建议同一个 Group ID 只对应一种类型的 Topic,即不同时用于顺序消息和无序消息的收发。
  • 顺序消息不支持异步发送方式,否则将无法严格保证顺序。
  • 对于全局顺序消息,建议至少创建 2 个 SDK 实例。同时运行多个实例,是为了防止工作实例意外退出而导致业务中断。当工作实例退出时,其他实例可以立即接手工作,不会导致业务中断,实际工作的只会有一个实例。

SDK 示例代码