RabbitMQ详解

MQ的优势:流量削峰、应用解耦、异步提速;劣势:应用复杂度增高、稳定性风险降低

RabbitMQ架构分布:

  • ExChange:交换机,消息到达MQ的第一站,会根据校验规则分发消息到消息队列中
  • Queqe:消息队列,消息会在这里等待消费者来消费
  • Binding:交换机与消息队列的虚拟链接,binding中可以包含routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

RabbitMQ工作模式:

  1. 简单模式:一个消息队列,一个消费者,不需要设置交换机(会使用默认交换机)
  2. 工作队列模式:一个消息队列,多个消费者(公平【轮询】或非公平),使用默认交换机
  3. 广播(fanout)模式:一个交换机,多个消息队列,交换机接受到消息后,会广播到绑定的所有消息队列
  4. 路由(direct)模式:一个交换机与多个不同routing key的队列绑定,交换机会根据接受到的消息routing key来分发消息
  5. 通配符(topic)模式:一个消息与多个不同通配符的routing key的队列绑定,交换机会根据接受到的消息,再与通配符作模糊匹配来分发消息。

RabbitMQ是如何保证消息的可靠性:

首先来分析下消息丢失的场景:消息生产者传到交换机时丢失;交换机分发消息到队列间丢失;消费者消费消息时丢失。以下从这三种情况来分析:

1、消息生产者传到交换机时丢失:这种情况一般是MQ宕机导致,可以开启confirm模式,开启后可以通过listener来监听消息投递的状态,会收到一个confirmCallback的信息,如果ack为false时,可以通过重新投递的方式来保证消息的可靠性。

2、交换机分发消息到队列间丢失:这种一般是队列满了导致投递失败,这种情况可以开启return模式,当投递后会收到一个returnCallback信息,这时可以监听投递失败与成功从而选择是否重发。

3、消费者消费消息时丢失:可以开启消费消息的手动确认模式(有三种:自动确认,手动确认,异常重发),当消息消费完成后确认消息消费,消息队列才会剔除消息,如果消费失败,可以选择重发指定次数后还是失败在存在库中或日志中以做进一步处理,这时设置消息丢弃。

RabbitMQ高级应用:

在实际业务中诸如:订单15分钟未支付自动取消、新用户注册三天后发送问候提醒,这些场景通过可以使用延迟队列(RabbitMQ没有实现延迟队列,但是可以实现)来实现。

延迟队列(TTL+死信交换机):给消息队列设置过期时间,不设置消费者来消费,当达到过期时间后,过期消息绑定到指定的死信交换机再次分发给消息队列,从而达到延迟队列的目的。

如何防止消息的重复消费:消费消息的方法最好能达到幂等性(多次消费相同消息不会对结果有影响),一般可以通过乐观锁来实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值