RabbitMQ-下-高级特性

RabbitMQ 高级特性

1 消息的可靠投递

在这里插入图片描述

概述
在这里插入图片描述

1.1 生产者层面 Producer====>Exchange

在这里插入图片描述

针对Producer===》Exchange
confirm模式
对Producer端发送消息的时候设置一个confirmCallback的监听,到达或者不到达MQ服务中间件Exchange,监听confirmCallback都会被执行。如果Exchange成功收到消息返回true,反着为false.也就是说不管消息有没有到达Exchange都会执行监听方法。
步骤:
在这里插入图片描述

生产者

  • 1:
    在这里插入图片描述
  • 2

在这里插入图片描述
失败后:再去做一些重发的处理。。。。
在这里插入图片描述

注意:CorrelationData correlationData = new CorrelationData();

《 correlationData这个对象的使用》
回调函数中confirm中的三个参数详解
在这里插入图片描述

1.2 生产者层面 Exchange ====》Queue

在这里插入图片描述

针对Exchange===>Queue
return模式
Exchange将消息路由到Queue失败了才会执行returnCallback。
步骤:
在这里插入图片描述
生产者:

  • 1在这里插入图片描述
  • 2
    在这里插入图片描述
    失败后:再去做一些重发的处理或者落地的处理

returnedMessage()参数解释
在这里插入图片描述

1.3 消费者层面

在这里插入图片描述

消费者:
针对Queue===>Consumer
消费者确认机制,队列发消息给消费者,消费者进行处理,回调信息,如果处理成功就把消息从队列中移除,如果失败就在重新发一次。

在这里插入图片描述

该消息被拒绝 而且重回队列 排队到末尾在执行 这可以叫死信消息
RabbitMQ默认是丢弃
在这里插入图片描述
消费者没有返回ACK/NACK 则消息状态是unacked
消费者重启在继续消费 或者新的消费者加入消费

Consumer Ack

概念
在这里插入图片描述
三种确认方式
在这里插入图片描述
步骤:

  • 1
    在这里插入图片描述
  • 2
    在这里插入图片描述
  • 3
    在这里插入图片描述
    测试:
    在这里插入图片描述

1.4 中间件

  • 1.对交换机持久化
  • 2.队列持久化
  • 3.消息持久化
  • 4.broker高可用

2 消费端限流

在这里插入图片描述
步骤:

  • 1
    在这里插入图片描述
  • 2
    在这里插入图片描述
    生产者发10条消息 消费端每次从MQ拉去一条消息来消费,直到手动确认消费完毕后,才继续拉去下一条

注意:官网解释perfetch:当前消费者channel允许的最大未确认消息个数
在这里插入图片描述
在这里插入图片描述
在channel中处理了一条就塞一条
在这里插入图片描述

3 TTL (过期时间&存活时间)

我们可以在RabbitMQ中的队列消息设置过期时间,然后这个过期时间到了会变成死信消息,死信消息默认是丢弃。

  • Time To Live
  • 当消息到达存活时间后,还没有被消费,就会被自动清除
  • 可以对 整个队列单个消息 进行设置过期消息
    在这里插入图片描述
RabbitMQ 管控台

创建队列
在这里插入图片描述
创建交换机
在这里插入图片描述
点进交换机 绑定队列
在这里插入图片描述
在这里插入图片描述
发送消息
在这里插入图片描述
结果:10s后会自动删除
在这里插入图片描述

JAVA编码设置:

在这里插入图片描述

设置1.队列过期时间

在这里插入图片描述
在这里插入图片描述
队列设定的时间:消息进入队列的时间 加你设定的过期时间的时间点才会过期
比如 第一条是13:10:10 +10s 那就13:10:20才会过期

设置2.消息单独过期

设置了队列过期 在设置消息过期 messagePostProcessor 消息的后处理对象的使用

在这里插入图片描述
注意: 设置了队列 又设置了消息 消息过期 但不会马上消失 只有到了顶端才会被消费。
在这里插入图片描述

死信队列(DLX)

Dead Letter Exchange(死信交换机),当消息成为Dead Message后 要丢弃的时候,也可以重新发送到另一个交换机,这个交换机叫做DLX 死信交换机

提问回答:
1消息在什么情况下会成为死信:

  • 1:队列消息长度到达限制
  • 2:消费者拒绝消息,basicNack/basicReject,并且不把消息重新放入原目标队列。
  • 3:原队列存在消息过期设置,消息到达超时时间没有被消费
  • 2如何给队列绑定死信交换机:
    在这里插入图片描述
    步骤图解:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置队列过期时间和消息长度限制
在这里插入图片描述
测试结论:
第三种要注意 我制造了个消费者 然后自己消费发生错误 但不重回队列 丢弃 就成死信消息

延迟消息(TTL+DLX)

延迟队列,就是消息进入队列后不会立即消费,只有到达指定时间才会消费。

运用:

在这里插入图片描述
业务图解
在这里插入图片描述

TTL+DLX
在这里插入图片描述

代码演示:
订单系统1: 设置正常的交换机+绑定死信交换机+和死信路由Key
在这里插入图片描述
2
在这里插入图片描述
测试 发送消息
消费者:完成一些列的了逻辑,万变不离其中

日志与监控

在这里插入图片描述
命令(了解下就行了)
在这里插入图片描述

消息追踪

  • 1: Firehose
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
管控台
在这里插入图片描述
在这里插入图片描述
随便往哪个队列发送消息 都会同步 如果开启RabbitMQ性能会下降

RabbitMQ应用型问题(思路)

1.消息可靠性保障

消息补偿机制

在这里插入图片描述

2.消息幂等信性保障 (确保有幂等性)

消费者拒绝消息 重回队列 重发机制可能也会重复消费 对我整个业务 和结果没有影响

1 针对于update方法乐观锁解决方案
2 删除delete幂等性要求 也有可能需要
3 insert 存在幂等性 在id字段添加唯一约束
4 业务上也可以做些判断 还是要根据实际业务出发

RabbitMQ 集群搭建&HAProxy

在这里插入图片描述
HAProxy 反向代理 高可用 负载均衡 需要自己安装 (单机多实例 成为伪集群) 根据文档搭建 需要的可以找我

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值