RabbitMQ--发布确认高级版

一、概念

1、目的  

        在Rabbit MQ宕机或者重启时保证消息不会丢失。

2、结构

3、做法

        发送给交换机信息时,交换机收到会给生产者发送接收到的消息,没有成功则发送没有成功的消息。

        如果消息没有到达目的地,会提示上传者发送消息未达。

       

二、实例代码

1、配置文件的主要参数:publisher-confirm-type(发布确认模式更改。)、publisher-returns(回退接口开启)

server:
  port: 8081

# rabiitmq 配置
spring:
  rabbitmq:
    host: 192.168.0.101
    port: 5672
    username: admin
    password: 123
    # 发布确认模式:none:默认。correlated:发送到交换机后会触发回调函数回调;SIMPLE:
    publisher-confirm-type: correlated
    #回退接口,消息穿不到目的时回退
    publisher-returns: true

2、RabbitMQ回退配置文件

@Component
public class MyCallBack implements RabbitTemplate.ConfirmCallback,RabbitTemplate.ReturnsCallback {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    //注入到RabbitTemplate.ConfirmCallback方法中
    @PostConstruct
    public void init(){
        //注入
        rabbitTemplate.setConfirmCallback(this::confirm);
        //注入+1
        rabbitTemplate.setReturnsCallback(this::returnedMessage);
    }

    //correlationData:消息相关数据
    //b:交换机是否到消息
    @Override
    public void confirm(CorrelationData correlationData, boolean b, String s) {
        String id=correlationData!=null?correlationData.getId():"";
        if(b){
            System.out.println("交换机已经收到id为:"+id+"的消息");
        }else {
            System.out.println("交换机未收到id为:"+id+"的消息,由于原因+"+s);
        }
    }

    //在消息传递过程中不可达目的时,将消息返回给上传者。只有不可达时才回退
    @Override
    public void returnedMessage(ReturnedMessage returnedMessage) {
        System.out.println("消息不可达到目的。\r\n" +
                "消息:"+new String(returnedMessage.getMessage().getBody())+
                "\r\n原因:"+returnedMessage.getReplyText()+
                "\r\n路由:"+returnedMessage.getRoutingKey());

    }

}

3、生产者。主要参数:CorrelationData

  @GetMapping("/test")
    public String getTest(){
        //回调函数参数。
        CorrelationData correlationData=new CorrelationData("id");
        rabbitTemplate.convertAndSend(TestConfig.NAME_EXCHANGE,TestConfig.NAME_KEY,"666",correlationData);
        return "成功";
    }

4、RabbitMQ的配置类和接收者类与普通模式无异。

5、测试。测试交换机:更改上传者发送的交换机名称。测试信道:同理

三、备份交换机

1、目的

        当原有交换机不可用时,备用交换机自动转发原交换机的信息。

2、结构图

       

 3、做法

        多加一个交换机和队列。在失败的回调方法中进行转发消息。

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值