SpringBoot整合RabbitMQ 回调函数 direct交换机、fanout交换机、topic交换机

本文详细介绍了如何在SpringBoot项目中整合RabbitMQ,包括配置回调函数、使用不同的队列逻辑以及处理直连、扇形和主题交换机的场景,如确认回调、消息确认机制和针对特定交换机的特殊处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移步 查看
SpringBoot整合RabbitMQ direct交换机、fanout交换机、topic交换机

回调函数

接下来,来看一下回调函数以及针对不同的队列使用不同的逻辑进行数据的消费。

若想要进行函数的回调,那么就需要在application.properties文件中,加入这两句代码

###配置回调函数确认
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.publisher-confirm-type=correlated

然后在生产者项目中配置一下RabbitConfig

import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {
   

    @Bean
    public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory){
   
        RabbitTemplate rabbitTemplate = new RabbitTemplate();
        rabbitTemplate.setConnectionFactory(connectionFactory);
        //设置强制调用回调函数
        rabbitTemplate.setMandatory(true);

        rabbitTemplate.setConfirmCallback((correlationData, b, s) -> {
   
            System.out.println("相关数据:"+correlationData);
            System.out.println("确认情况:"+b);
            System.out.println("原因:"+s);
         	System.out.println("===============================");
        });

        rabbitTemplate.setReturnsCallback(returnedMessage -> {
   
            System.out.println("交换机为:"+returnedMessage.getExchange());
            System.out.println("返回消息为:"+returnedMessage.getMessage());
            System.out.println("路由键为:"+returnedMessage.getRoutingKey());
            System.out.println("回应消息为:"+returnedMessage.getReplyText());
            System.out.println("回应代码为:"+returnedMessage.getReplyCode());
         	System.out.println("===============================");
        });
        return rabbitTemplate;
    }
}

那么发送数据时,什么时候会进入不同的回调函数呢?
上面已经介绍了四种状态,点击链接直接抵达~
然后添加以下三个方法,匹配了1、2、3中状态。

    @RequestMapping("/noExchange")
    public void sendToNoExchange(){
   
    	//交换机不存在
        Map<String,Object> m = commonMap("Judge the exchange is not exist!");
        rabbitTemplate.convertAndSend("amq.topic1","topic.asdasd",m);
    }

    @RequestMapping("/noRoute")
    public void sendToNoRoute(){<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值