springboot--RabbitMQ中的消息確認

RabbitMQ的兩種消息確認,publisherConfirms 和 publisherReturns。
  • publisherConfirms:消息發送到exchange,返回成功或者失敗。
  • publishReturns:消息從exchange到queue,發送成功或者失敗。
    具體操作看下方代碼
  1. 消費者與生產者兩方都要配置CachingConnectionFactory,其中將publisherConfirms,publishReturns開啓,默認都是false
	@Bean
    @ConditionalOnClass
    public CachingConnectionFactory connectionFactory() {
        CachingConnectionFactory factory = new CachingConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        factory.setPublisherConfirms(true);
        factory.setPublisherReturns(true);
        return factory;
    }
  1. 消息Procuder端:設置RabbitTemplate相關屬性
	@Bean
    @ConditionalOnClass
    public RabbitTemplate template(CachingConnectionFactory connectionFactory) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setConfirmCallback((correlationData, ack, cause) -> {
            LOGGER.info("confirm callback publish --> status of publihs message: {}", ack);
            LOGGER.info("confirm callback publish --> correlationData: {}", correlationData);
            LOGGER.info("confirm callback publish --> cause: {}", cause);
        });
        // 如果設置ReturnCallback,必須將Mandatory設置爲true
        template.setMandatory(true);
        template.setReturnCallback((message, replyCode, replyText,
                                    exchange, routingKey) -> {
            LOGGER.info("return callbak exchange: {}, routingKey: {}, message:{}", exchange, routingKey, new String(message.getBody(), StandardCharsets.UTF_8));
        });
        return template;
    }

相關代碼就是如此簡單,驗證時可以幹掉exchange,這樣就可以驗證confirm。將queue與exchange解綁,可以驗證returnCallback

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章