9-rabbitMQ

使用场景

  • 使用 MQ 异步发送优惠券;
  • 使用 MQ 异步发送通知(短信、邮件);
  • 使用 MQ 异步扣库存/增加积分/

消息队列有什么优缺点?

优点

解藕、异步、削峰

缺点

可用性降低、复杂度提高、一致性问题

RabbitMQ、RocketMQ、kafka 对比?

  • 吞吐量
  • 消息延迟
  • 可靠性
  • 可用性

RabbitMQ 6种工作模式

消息路由分发的方式不同

简单模式和工作模式,一条消息只能被消费一次

  • 简单模式: 不需要交换机
  • work queues: 不需要交换机
  • fanout 发布与订阅模式 : 交换机和队列绑定不需要路由键
  • Routing 路由模式 : 交换机和队列通过路由键绑定
  • Topics 主题模式 : 交换机和队列通过路由键绑定,并且路由键可以使用通配符
  • RPC 远程调用模式 :

生产者消息运转

  1. Producer先连接到Broker,建立连接Connection,开启一个信道(Channel)。

  2. Producer声明一个交换器并设置好相关属性。

  3. Producer声明一个队列并设置好相关属性。

  4. Producer通过路由键将交换器和队列绑定起来。

  5. Producer发送消息到Broker,其中包含路由键、交换器等信息。

  6. 相应的交换器根据接收到的路由键查找匹配的队列。

  7. 如果找到,将消息存入对应的队列,如果没有找到,会根据生产者的配置丢弃或者退回给生产者。

  8. 关闭信道。

  9. 关闭连接。

springboot 整合rabbitMQ

生产端

  1. pom文件中,引入依赖
  2. yml文件中,配置基本信息
  3. 写一个配置类,定义交换机,队列和绑定信息
  4. 注入rabbitTemplete,调用方法,完成消息发送

消费端

  1. pom文件中,引入依赖
  2. yml文件中,配置基本信息
  3. 写一个监听类,使用@RabbitListener 注解完成队列监听

RabbitMQ高级特性

  • 消息可靠性投递
  • Consumer ACK
  • 消费端限流
  • TTL
  • 死信队列
  • 延迟队列
  • 日志与监控
  • 消息可靠性分析与追踪
  • 管理

消息可靠投递

confirm模式

  • 在配置信息中开启确认模式。
  • 使用rabbitTemplate.setConfirmCallback设置回调函数。
    当消息发送到exchange后回 调confirm方法。在方法中判断ack,如果为true,则发送成功,如果为false,则发 送失败,需要处理。

retun 模式

  • 在配置信息中开启退回模式。
  • 使用rabbitTemplate.setReturnCallback设置退回函数,当消息从exchange路由到 queue失败后,如果设置了rabbitTemplate.setMandatory(true)参数,则会将消息退 回给producer。并执行回调函数returnedMessage。

Consumer Ack

  • 配置信息中设置ack方式 none:自动确认,manual:手 动确认
  • 如果在消费端没有出现异常,则调用channel.basicAck(deliveryTag,false);方法确认签收消息
  • 如果出现异常,则在catch中调用 basicNack或 basicReject,拒绝消息,让MQ重新发送消息。

消费端限流

  • 在rabbit:listener-container 中配置消费端一次拉取多少消息

死信队列

  1. 死信交换机和死信队列和普通的没有区别
  2. 当消息成为死信后,如果该队列绑定了死信交换机,则消息会被死信交换机重新路由到死信队列
  3. 消息成为死信的三种情况:
  4. 队列消息长度到达限制;
  5. 消费者拒接消费消息,并且不重回队列;
  6. 原队列存在消息过期设置,消息到达超时时间未被消费;

延迟队列

  1. 延迟队列 指消息进入队列后,可以被延迟一定时间,再进行消费。
  2. RabbitMQ没有提供延迟队列功能,但是可以使用 : TTL + DLX 来实现延迟队列效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值