栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Springboot集成RabbitMQ【生产者推送消息确认】

Springboot集成RabbitMQ【生产者推送消息确认】

消息确认共分为两个方面,一个是生产者推送消息确认,一个是消费者接收消息的确认。
此篇文章讲解的是 生产者推送消息确认。


首先,先分析生产者推送消息的可能出现情况:

消息推送到server,但找不到对应Exchange;消息推送到server,找到Exchange,但没找到匹配的Queue;消息推送到server,找不到Exchange也找不到Queue;消息推送到server,成功推送到Queue;

对于上面的四种情况,RabbitMQ提供了两个回调函数,分别是 ConfirmCallback 和 ReturnsCallback。


回调函数配置:

@Configuration
public class RabbitMQConfig {

    
    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);

        
        rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());

        
        // ConfirmCallback 
        // 消息发送到Exchange的回调函数,需要在application.yml添加 publisher-/confirm/i-type:  correlated 来开启
        rabbitTemplate.set/confirm/iCallback((correlationData, ack, cause) -> {
            System.out.println("【/confirm/iCallback】相关数据:" + correlationData);
            System.out.println("【/confirm/iCallback】确认情况:" + ack);
            System.out.println("【/confirm/iCallback】原因:" + cause);
        });
        // ReturnsCallback
        // 需要这里开启Mandatory,确保消息在未被队列接收时回调,若只在application.yml添加 publisher-returns: true 测试无效
        rabbitTemplate.setMandatory(true);
        rabbitTemplate.setReturnsCallback(returnedMessage -> {
            System.out.println("【ReturnsCallback】消息:" + returnedMessage.getMessage());
            System.out.println("【ReturnsCallback】回应码:" + returnedMessage.getReplyCode());
            System.out.println("【ReturnsCallback】回应信息:" + returnedMessage.getReplyText());
            System.out.println("【ReturnsCallback】交换器:" + returnedMessage.getExchange());
            System.out.println("【ReturnsCallback】路由键:" + returnedMessage.getRoutingKey());
        });

        return rabbitTemplate;
    }

}

application.yml:

spring:
  application:
    name: rabbitmq-producer
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /debug
    publisher-/confirm/i-type:  correlated   #确认消息已发送到 Exchange,默认是none

示例一:

示例二:

示例结果说明:

/confirm/iCallback无论消息是否成功发送到Exchange都会返回回调结果。ReturnsCallback则(前提是消息成功发送到Exchange)只有在Exchange无法将消息成功转发到Queue时才会返回回调信息。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号