栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RabbitMQ详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号