开发者社区> 问答> 正文

顺序消息如何做到?


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

SDK 支持


请使用 Java SDK 1.2.7 及以上版本。C++/.NET SDK 即将支持。
示例代码请参考以下文档:



概念介绍


顺序消息是 MQ 提供的一种按照顺序进行发布和消费的消息类型。顺序消息由两个部分组成:顺序发布和顺序消费。
  • [backcolor=transparent]顺序发布:对于指定的一个 Topic,客户端将按照一定的先后顺序进行发送消息。
  • [backcolor=transparent]顺序消费:对于指定的一个 Topic,按照一定的先后顺序进行接收消息,即先发送的消息一定会先被客户端接收到。

顺序消息类型分为两种:全局顺序和分区顺序。

  • [backcolor=transparent]全局顺序:对于指定的一个 Topic,所有消息按照严格的先入先出(FIFO)的顺序进行发布和消费。


适用场景


MQ [backcolor=transparent]全局顺序消息适用于以下场景:
  • 性能要求不高,所有的消息严格按照 FIFO 原则进行消息发布和消费的场景。

MQ [backcolor=transparent]分区顺序消息适用于如下场景:

  • 性能要求高,以 sharding key 作为分区字段,在同一个区块中严格的按照 FIFO 原则进行消息发布和消费的场景。
    举例说明:
    【例一】用户注册需要发送发验证码,以用户 ID 作为 sharding key, 那么同一个用户发送的消息都会按照先后顺序来发布和订阅。

  • 【例二】电商的订单创建,以订单 ID 作为 sharding key,那么同一个订单相关的创建订单消息、订单支付消息、订单退款消息、订单物流消息都会按照先后顺序来发布和订阅。

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

顺序消息对比


在控制台创建顺序消息使用的 Topic,各种类型 Topic 对比如下。
[backcolor=transparent]消息类型对比
Topic 类型支持事务消息支持定时消息性能
无序消息最高
分区顺序
全局顺序一般

[backcolor=transparent]发送方式对比
消息类型支持可靠同步发送支持可靠异步发送支持 Oneway 发送
无序消息
分区顺序
全局顺序


注意事项

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

展开
收起
猫饭先生 2017-10-26 13:48:45 1966 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载