RocketMQ基础

1.消息队列

消息队列是指在消息传输过程中使用队列来储存消息的组件,在程序开发中通常代指消息中间件

当前使用较多的消息中间件有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等。

  • Kafka:Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。大型公司建议可以选用,如果有日志采集功能,首选kafka;

  • RabbitMQ:结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。如果数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ;

  • RocketMQ:天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选RocketMQ;

  • ActiveMQ:是Apache出品,最流行的,能力强劲的开源消息总线。官方社区现在对ActiveMQ 5.x维护越来越少,较少在大规模吞吐的场景中使用;

2. 消息队列的作用
  • 应用解耦

    系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。使用消息队列解耦合,系统的耦合性就会降低了。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物流系统回复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障;

        

  • 流量削峰

    应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性和用户体验;

        

  • 数据分发

    通过消息队列可以让数据在多个系统之间进行流通。数据的生产方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可;
3. RocketMQ架构
  • Producer(生产者):消息的发送者,负责生成并发送消息到rocketmq;

  • Consumer(消费者):消息的订阅者,负责从rocketmq接收并消费消息;

  • Broker(消息代理):rocketmq的核心,用于暂存和传输消息;

  • NameServer(服务注册中心):管理所有broker,rocketmq需要先启动nameServer后再启动broker;

  • Topic(消息主题):标识一类消息的逻辑名字,无论生产消息还是消费消息,都需要指定topic。一个发送者可以发送消息给一个或者多个topic,一个消息的接收者可以订阅一个或者多个Topic消息;

  • Tag(标签):tag是在topic基础上对消息进行更细粒度的分类,用于进一步筛选和过滤消息。消费topic的时候,如果指定的是tagA,那么tagB的消息将不会投递;

  • Message Queue(消息队列):,相当于是Topic的分区,用于并行发送和接收消息;

4. RocketMQ消息种类

每个消息主题(Topic)在创建时只能选择一种消息类型。

  • Normal(普通消息)

    • 最常用的消息,没有什特别的要求,只要能正常生产消费即可,比如一些营销短信和通知短信

  • FIFO(顺序消息)

    • 一系列相关消息的消费顺序有要求,必须有先后的消费顺序,比如系统中的多笔款项转到同一张银行卡,必须保证转账消息的先后顺序,才能确保用户收到款项的正确顺序。一般是通过设置队列选择器和队列数量一系列的消息放到同一的队列中实现;

  • Delay(延时消息)

    • 通过指定延时时间控制消息生产后不要立即投递,而是在延时间间隔后才对消费者可见。比如定时生日邮件

  • Transaction(事务消息)

    • 事务消息是一种特殊的消息类型,它可以保证消息的发送本地事务执行结果一致

      • 消息的发送:就是生产者将消息发送到RocketMQ上的过程;

      • 本地事务: 这个更好理解,就是你本地的一个操作集合,这些操作要么一起成功要么一起失败;

      • 执行结果的一致: 也就是本地事务成功,我这条消息能保证发送到RocketMQ上被消费,本地事务执行失败,该消息就无法被消费;

5. RocketMQ消息发送模式
  • 同步发送模式(sync)

    • 生产者每次发出一条消息,都要等待服务器返回接收确认信息以后才会发送下一条消息;

           

  • 异步发送模式(async)

  • 生产者发出消息后不需要等待服务器返回接收确认就可以继续发送下一条消息;

  • 单向发送模式(oneway)

    • 生产者发出消息后不需要服务器的响应;​

6. RocketMQ消息消费模式
  • 集群消费模式

    • 可以实现消息的负载均衡(消息被平分给每个消费者),提高消费的效率和性能

    • 同一Group下的多个消费者消费指定Topic中的消息时,消息队列 RocketMQ 版会将多条消息投递给不同的消费者处理,同一条消息只会被一个消费者消费到;

  • 广播消费模式

    • 可以实现消息的多播,满足多个消费者同时处理同一条消息的需求;

    • 同一Group下的多个消费者消费指定Topic中的消息时,消息队列 RocketMQ 版会将每条消息都投递给集群内所有的消费者,保证每条消息至少被每个消费者消费一次;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值