美文网首页技术
RabbitMQ消息确认(一)——生产者推送消息

RabbitMQ消息确认(一)——生产者推送消息

作者: 砒霜拌辣椒 | 来源:发表于2020-09-14 22:58 被阅读0次

生产者推送消息确认机制有2种,分别是:

  • 确认消息已发送到交换机(Exchange)
  • 确认消息已发送到队列(Queue)

1、配置文件

server:
  port: 30200

spring:
  rabbitmq:
    host: 148.70.153.63
    port: 5672
    username: libai
    password: password
    # 确认消息已发送到交换机(Exchange); Springboot2.2.x改为 publisher-confirm-type: correlated
    publisher-confirms: true
    # 确认消息已发送到队列(Queue)
    publisher-returns: true

2、RabbitTemplate配置

@Configuration
@Slf4j
public class RabbitMQConfig {
    /**
     * 1. 消息推送到server,但是在server里找不到交换机
     * 2. 消息推送到server,找到交换机了,但是没找到队列
     * 3. 消息推送成功
     */
    @Bean
    public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate();
        rabbitTemplate.setConnectionFactory(connectionFactory);
        // 设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
        rabbitTemplate.setMandatory(true);

        // 确认消息已发送到交换机(Exchange)
        // 1、2、3都会触发此回调函数
        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
            log.info("ConfirmCallback:     " + "相关数据:" + correlationData);
            log.info("ConfirmCallback:     " + "确认情况:" + ack);
            log.info("ConfirmCallback:     " + "原因:" + cause);
        });

        // 确认消息已发送到队列(Queue)
        // 只有2才会触发此回调函数
        rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
            log.info("ReturnCallback:     " + "消息:" + message);
            log.info("ReturnCallback:     " + "回应码:" + replyCode);
            log.info("ReturnCallback:     " + "回应信息:" + replyText);
            log.info("ReturnCallback:     " + "交换机:" + exchange);
            log.info("ReturnCallback:     " + "路由键:" + routingKey);
        });
        return rabbitTemplate;
    }
}

在配置中重新定义了RabbitTemplate,分3种情况测试:

  1. 消息推送到server,但是在server里找不到交换机。
  2. 消息推送到server,找到交换机了,但是没找到队列。
  3. 消息推送成功。

结果:

  1. 只回调ConfirmCallback函数。
ConfirmCallback:     相关数据:null
ConfirmCallback:     确认情况:false
ConfirmCallback:     原因:channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'directExchange1' in vhost '/', class-id=60, method-id=40)
  1. 回调ConfirmCallbackReturnCallback函数。
ReturnCallback:     消息:(Body:'{createTime=2020-09-14 22:48:22, messageId=02007bf3-3eb6-4e53-a539-45c28f012c46, messageData=RabbitMQ}' MessageProperties [headers={}, contentType=application/x-java-serialized-object, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, deliveryTag=0])
ReturnCallback:     回应码:312
ReturnCallback:     回应信息:NO_ROUTE
ReturnCallback:     交换机:directExchange
ReturnCallback:     路由键:directRouting2
--
ConfirmCallback:     相关数据:null
ConfirmCallback:     确认情况:true
ConfirmCallback:     原因:null
  1. 只回调ConfirmCallback函数。
ConfirmCallback:     相关数据:null
ConfirmCallback:     确认情况:true
ConfirmCallback:     原因:null

每种情况都会回调ConfirmCallback函数;只有找不到队列时才会回调ReturnCallback函数。

RabbitMQ消息确认(二)——消费者接收消息手动ACK

参考链接

代码地址

相关文章

  • rabbitmq消息确认

    rabbitmq消息确认 消息确认 当生产者投递消息到broker,rabbitmq把消息分发到消费者。 如果设置...

  • RabbitMQ消息确认(一)——生产者推送消息

    生产者推送消息确认机制有2种,分别是: 确认消息已发送到交换机(Exchange) 确认消息已发送到队列(Queu...

  • RabbitMQ入门5-消息确认模式和幂等性

    1.消息确认模式 在RabbitMQ中,消息确认主要有生产者发生确认和消费者接收确认 1.1生产者发送确认 生产者...

  • 消息队列之RabbitMQ-消息确认机制

    RabbitMQ的消息确认有两种: 对生产者发送消息的确认:发送消息时,由于网络等原因可能导致消息发送失败。所以,...

  • RabbtiMQ高级特性--消息投递机制

    Confirm确认消息 消息确认,是指生产者消息投递后,如果Broker收到消息,则会给生产者一个应答 生产者进行...

  • rabbitmq(三)事务和Confirm

    一 消息确认机制 问题:生产者将消息发送出去之后,消息到底有没有到达rabbitmq服务器,默认的情况是不知道的两...

  • rabbitMQ消息确认

    消息确认 当生产者投递消息到消费者broker会立即从内存中将消息删除,在这种情况下,杀掉一个消费者将会丢失消息。...

  • Confirm确认消息

    消息确认机制 1.消息的确认,是指生产者投递消息后,如果Broker接受到消息,则会给生产者一个应答。2.生产者进...

  • RabbitMQ的基本概念和七种队列模式

    I. RabbitMQ的基本概念 1. 生产者/消费者 生产者(Producer)消息的创建者。负责创建和推送数据...

  • RabbitMQ确认消息Confirm详解

    理解Confirm消息确认机制 消息的确认,是指生产者投递消息后,如果Broker收到消息,则会给我们生产者一个应...

网友评论

    本文标题:RabbitMQ消息确认(一)——生产者推送消息

    本文链接:https://www.haomeiwen.com/subject/omotyktx.html