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()));
    }
相关推荐
带刺的坐椅13 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai
c2385613 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
error:(14 小时前
【系统与实战双精通】VS Code 调试 ROS2 Python 节点与 Launch 系统指南
android·java·python
Tian_Hang14 小时前
Eclipse Ditto 的权限策略
java·服务器·前端·网络·ide·ubuntu·eclipse
小蓝波14 小时前
docker 的命令
java·docker·容器
AI人工智能+电脑小能手15 小时前
【大白话说Java面试题 第155题】【06_Spring篇】第15题:Spring 如何解决循环依赖问题?
java·spring·循环依赖·三级缓存·aop代理
唐青枫15 小时前
Java Maven 实战指南:从 POM、依赖管理到多模块构建
java
硕风和炜15 小时前
【LeetCode: 1301. 最大得分的路径数目 + DP】
java·算法·leetcode·动态规划·dp·记忆化搜索
SamDeepThinking15 小时前
面向对象真正管理的,不是对象,而是依赖
java·后端·程序员
剑挑星河月16 小时前
94.二叉树的中序遍历
java·算法·leetcode