rabbitMQ RabbitTemplate 发送消息

消息发送确认机制

消息发送确认机制:消息由producer发送后,确认其是否到达broker,又是否被exchange转发至对应queue的机制

该机制分为两部分:producer---broker,exchange---queue

前者的实现依靠ConfirmCallback机制,后者的实现依靠ReturrnsCallback机制

ConfirmCallback:

实现ConfirmCallback接口,并重写confirm方法

confirm方法参数含义:

correlationData:CorrelationData类只有一个 id 属性 用于唯一标识该消息 public CorrelationData() { this.id = UUID.randomUUID().toString(); }

ack:消息是否成功传输到 broker (true表示成功传输 false表示传输失败)

cause:传输失败的原因

ReturrnsCallback:

实现ReturnsCallback接口,并重写returnedMessage方法

当消息转发失败后就会触发ReturrnsCallback,会将消息返回给生产者,同时会返回与消息转发失败的相关信息(包含在参数returned内),可对此采取后续处理

java 复制代码
@Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private ConfirmCallbackService confirmCallbackService;

    @Autowired
    private ReturnCallbackService returnCallbackService;

    public void sendMessage(String exchange, String routingKey, Object msg) {

        /**
         * 确保消息发送失败后可以重新返回到队列中
         * 注意:yml需要配置 publisher-returns: true
         */
        rabbitTemplate.setMandatory(true);

        /**
         * 消费者确认收到消息后,手动ack回执回调处理
         */
        rabbitTemplate.setConfirmCallback(confirmCallbackService);

        /**
         * 消息投递到队列失败回调处理
         */
        rabbitTemplate.setReturnCallback(returnCallbackService);

        /**
         * 发送消息
         */
        rabbitTemplate.convertAndSend(exchange, routingKey, msg,
                message -> {
                    message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                    return message;
                },
                new CorrelationData(UUID.randomUUID().toString()));
    }
相关推荐
haozihua1 小时前
Javaweb梳理9——JDBC
java·数据库
弗拉唐1 小时前
SSM中maven
java·前端·maven
程序猿麦小七1 小时前
基于springboot的社区团购管理系统的设计与实现
java·spring boot·后端·社区·团购
Liquor14191 小时前
vim 编辑器
java·linux·c语言·开发语言·python·编辑器·vim
天天进步20151 小时前
用Vue3+SpringBoot实现餐厅点餐系统的购物车功能
java·spring boot·后端
心安成长2 小时前
IntelliJ IDEA快速接入LLMs大模型API
java·ide·intellij-idea
一位资深码农2 小时前
SpringBoot 多元化配置(处理乱码)
java·spring boot·后端
诗这样的2 小时前
【需求变更】使用 Redis 和 Lua 脚本实现变更后方案编号的生成
java·redis·缓存·微服务·lua·需求分析
程序猿进阶2 小时前
Redis 基础数据改造
java·开发语言·数据库·redis·后端·面试·架构
全栈开发帅帅2 小时前
基于springboot+vue实现的养老院管理系统(源码+L文+ppt)
java·spring boot·后端