SOFAStack 消息队列(SOFAStack MQ,简称 SOFAMQ)是基于 Apache RocketMQ 构建的分布式消息中间件,并与金融分布式架构 SOFAStack 深度集成,为分布式应用系统提供异步解耦和削峰填谷的能力,支持事务消息、顺序消息、定时消息等多种消息类型,并具备高可靠、高吞吐、低延时等金融级特性。
应用场景
异步解耦消息队列的生产消费模型可以解耦上下游业务系统,并支持下游多个消费者对同一消息进行消费和处理。以金融场景为例,支付中心作为支付宝主站最核心的系统,每笔支付数据的产生会引起几百个下游业务系统的关注,包括账户中心、用户中心、权益中心、流计算分析等,整体业务系统庞大而且复杂,在应用强耦合的情况下,任一应用故障都将可能对业务带来影响。通过消息队列进行异步通信和应用解耦,可以很好的提升业务的连续性。
削峰填谷应用分布式改造后,不同应用能承载的性能情况往往不一致,在诸如双 11、店庆、秒杀等大型活动时,将会带来较高的流量脉冲,可能导致系统超负荷甚至崩溃,影响用户体验。消息队列可提供强大的抗积压能力,实现削峰填谷,生产方生产消息后,消费方可以按照系统自身的承受能力进行消息的消费。
顺序收发指的是消息消费者按照消息发送的顺序进行消费,保证 FIFO。金融场景里需要保证顺序的应用场景非常多,例如证券交易过程中的时间优先原则(交易系统中的订单创建、支付、退款等流程)。
分布式事务一致性应用解耦往往带来多个应用之间的事务一致性的问题。例如支付转账成功后,需要生成账单,更新用户积分等,此时通过消息队列的分布式事务处理功能,既可以实现系统之间的解耦,又可以保证最终的数据一致性。
更多信息请参见 应用场景。
核心概念
Topic:消息主题,一级消息类型,生产者向其发送消息。
生产者:也称为消息发布者,负责生产并发送消息至 Topic。
消费者:也称为消息订阅者,负责从 Topic 接收并消费消息。
消息:生产者向 Topic 发送并最终传送给消费者的数据和(可选)属性的组合。
消息属性:生产者可以为消息定义的属性,包含 Message Key 和 Tag。
Group:一类生产者或消费者,这类生产者或消费者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。
更多概念解释请参见 基础术语。
消息收发模型
消息队列支持发布/订阅模型,消息生产者应用创建 Topic 并将消息发送到 Topic。消费者应用创建对 Topic 的订阅以便从其接收消息。通信可以是一对多(扇出)、多对一(扇入)和多对多。
生产者集群
用来表示发送消息应用,一个生产者集群下包含多个生产者实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个生产者对象。
一个生产者集群可以发送多个 Topic 消息。发送分布式事务消息时,如果生产者中途意外宕机,Broker 会主动回调生产者集群的任意一台机器来确认事务状态。
消费者集群
用来表示消费消息应用,一个消费者集群下包含多个消费者实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个消费者对象。
一个消费者集群下的多个消费者以均摊方式消费消息。如果设置的是广播方式,那么这个消费者集群下的每个实例都消费全量数据。
一个消费者集群对应一个 Group ID,一个 Group ID 可以订阅多个 Topic,如上图中的 Group 2 所示。Group 和 Topic 的订阅关系可以通过直接在程序中设置即可。