RabbitMQ--发布确认高级版

Posted Mr...Gan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、做法

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

        

以上是关于RabbitMQ--发布确认高级版的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ发布确认高级部分

RabbitMQ-发布确认高级

RabbitMQ学习--发布确认高级

RabbitMQ学习--发布确认高级

RabbitMQ:发布确认高级

RabbitMQ发布确认高级