13.RabbitMQ 消息可靠性投递confirm确认模式

  在使用RabbitMQ的时候,消息生产者发送消息不希望出现消息丢失或者投递失败的现象;

  RabbitMQ在消息投递可靠性方面给我们提供了两种模式;

    1,confirm确认模式

    2,return 退回模式

confirm确认模式介绍以及实现

  confirm机制,消息的确认,是指生产者投递消息之后,如果Broker收到消息,则会给生产者一个应答,生产者能接收应答,用来确定这条消息是否正常的发送到Broker,这种机制是消息可靠性投递的核心保障。

  confirm机制是只保证消息到达exchange,并不保证消息可以路由到正确的queue,如果exchange错误,就会触发confirm机制在这里插入图片描述
  1、配置文件设置

# 开启confirm模式
spring.rabbitmq.publisher-confirm-type=correlated

  2、com.java996.producer.Service.impl.RabbitMqServiceImpl实现RabbitTemplate.ConfirmCallback接口,实现confirm方法

@Service("RabbitMqService")
public class RabbitMqServiceImpl implements RabbitMqService, RabbitTemplate.ConfirmCallback{

    /**
     *
     * @param correlationData  消息唯一标识
     * @param ack 交换机是否成功收到消息 true成功  false失败
     * @param cause 失败原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        System.out.println("confirm方法被执行..."+correlationData.getId());
        if(ack){
            System.out.println("交换机 消息接收成功"+cause);
        }else{
            System.out.println("交换机 消息接收失败"+cause);
            // 这里我们需要做一些消息补发措施
        }
    }
    ......    
}

  3、注入RabbitTemplate模版

@Autowired
private RabbitTemplate rabbitTemplate;

  4、初始化设置

@PostConstruct
public void init(){
    rabbitTemplate.setConfirmCallback(this);
}

  5、发送数据测试

@Override
public void sendMessage(String message) {
    CorrelationData correlationData = new CorrelationData("1");
    rabbitTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE,RabbitMqConfig.DIRECT_ROUTINGKEY,message,correlationData);
}

  6、启动测试:

package com.java996.producer;

import com.java996.producer.Service.RabbitMqService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class ProducerApp {
    public static void main(String[] args) {
     ConfigurableApplicationContext context = SpringApplication.run(ProducerApp.class,args);
        RabbitMqService rabbitMqService = (RabbitMqService) context.getBean("RabbitMqService");
        rabbitMqService.sendMessage("confirm确认测试");
    }
}

  7、控制台:
在这里插入图片描述
  8、队列:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值