消息队列的使用场景是怎样的

阿凡达2020-03-25 16:24

从 RocketMQ 的核⼼功能可以反推消息队列的使⽤场景:
• 普通消息收发
• 普通顺序消息(Normal Ordered Message):普通顺序消费模式下,消费者通过同⼀个消费队列收到的消息是有顺序的,不同消息队列收到的消息则可能是无序的。
• 严格顺序消息(Strictly Ordered Message):严格顺序消息模式下,消费者收到的所有消息均是有顺序的。
• 集群消费(Clustering):集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊消息。
• ⼴播消费(Broadcasting):⼴播消费模式下,相同Consumer Group的每个Consumer实例都接收全量的消息。
• 事务消息: RocketMQ事务消息(Transactional Message)是指应⽤本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终⼀致。
• 延迟消息: 定时消息(延迟队列)是指消息发送到broker后,不会⽴即被消费,等待特定时间投递给真正的topic。 broker有配置项messageDelayLevel,默认值为“1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h”,18个level。
• 死信队列:死信队列⽤于处理⽆法被正常消费的消息。当⼀条消息初次消费失败,消息队列会⾃动进⾏消息重试;达到最⼤重试次数后,若消费依然失败,则表明消费者在正常情况下⽆法正确地消费该消息,此时,消息队列不会⽴刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。RocketMQ将这种正常情况下⽆法被消费的消息称为死信消息(Dead-Letter Message),将存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。
但是传统消息队列集群也会⾯临各种问题:资源利⽤不均衡、⼿动运维⻛险、基础⽣态较差(开源控制台功能较少)等。