第十三章 MQ高级篇 生产者确认机制

生成者重连和生产者确认机制2个机制不一样

生产者重连大部分场景是和mq进行交互,出现了网络波动。mq挂了的场景

生成者确认机制是生成者发送消息,发送失败了怎么办?

rabbitmq有2种机制分别是publisher confirm和publisher return 2种确认机制,机制开启后生产者往rabbimq发送消息,然后发送失败,这时候mq会告诉生产者是否成功

用java代码如何实现呢?

其实他有2中方式:1种是同步 1种是异步 同步是生产者把消息发送到mq,然后mq返回ack告诉生成者收到消息了,异步是生产者把消息发送到mq,然后接口处理其他事情,不用等待返回的ack

在配置文件中添加publisher-confirm-type 添加这个配置 顾名思义就是生产者确认类型

3中类型 none 关闭confirm机制  simple 同步  correlated 异步

第二种publise-returns:true 是开启了returns 是否开启返回失败消息的机制

        return这种情况大部分都是在路由失败返回的

首先在配置中添加 publisher-confirm-type :corelated publisher-returns :true 是否开始失败回调

创建一个MqConfirmConfig用于回调告诉生产者收到消息了

消费者发送消息

我创建了CorrelationData然后给一个uuid他主要是在发送消息的时候,给消息一个唯一的id。

假如我们有3个mq的key配置错误,然后再回调的时候他会给这个uuid带上,能方便区别是那个uuid对应那个消息

结果

测试一下如果roukey不存在的情况下发送消息会出现什么情况

我把roukey改为red2

结果

可以看到2个uuid回来了,并且刚刚的retrun配置类也生效了其中有code:312  text:not_route 没有路由

如果交换机不存在,然后进行发送会出来nack情况

我自己分析了一下为什么交换机输错了,会触发nack不触发那个return

可能是因为你发送者先把消息给交换机,然后交换机在通过key路由到队列中

应该是交换机不存在,会直接返回

而路由key错的话,他是能找到交换机,只是找不到这个交换机上绑定的key所以不会出现nack。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值