RabbitMQ消息确认机制

2023-11-18

消息确认

基本流程

说明:

  • 生产者发送消息到RabbitMQ Server后,RabbitMQ Server需要对生产者进行消息Confirm确认。
  • 消费者消费消息后需要对 RabbitMQ Server进行消息ACK确认。

消息确认模式

RabbitMq提供了两种消息发送者确认模式分别为: ConfirmCallback确认模式和 ReturnCallback退回模式。

ConfirmCallback确认模式

@Component
public class RabbitConfirmConfig implements ConfirmCallback
{
    private Logger logger = LoggerFactory.getLogger(RabbitConfirmConfig.class);
    
    public void confirm(CorrelationData correlationData, boolean ack,
            String cause)
    {
        logger.info("数据内容:{}",correlationData);
        logger.info("是否确认成功:{}",ack);
        logger.info("错误原因:{}",cause);
        if (!ack) 
        {
            logger.info("exchange produce confirm message send error" + cause);
        }
        else 
        {
            logger.info("exchange produce confirm message send success");
        }
    }
}

复制代码

说明:ConfirmCallback模式确认,需要重写confirm接方法,此方法的三个参数分别为:CorrelationData、ack、cause

  • CorrelationData:对象内部只有一个id属性,用来表示当前消息的唯一性。
  • ack:消息投递状态,true表示投递成功
  • cause: 消息投递失败原因

虽然消息被broker接收到只能表示已经到达MQ服务器,但是并不能保证消息一定会被投递到目标 queue里。所以我们需要实现returnCallback来进行相关处理。

ReturnCallback退回模式

@Component
public class RabbitReturnConfig implements ReturnCallback
{
    private Logger logger = LoggerFactory.getLogger(RabbitReturnConfig.class);
    
    public void returnedMessage(Message message, int replyCode,
            String replyText, String exchange, String routingKey)
    {
       logger.info("消息发送送到队列信息:");
       logger.info("发生消息:{}",message);
       logger.info("回应码:{}",replyCode);
       logger.info("回应信息:{}",replyText);
       logger.info("交换机:{}",exchange);
       logger.i
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ消息确认机制 的相关文章

  • 为什么 JavaFX API 不包含在 Java 8 J2SE 中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有谁知道为什么 JavaFX 8 仍然不是即将推出的 Java 8 中的日常 J2SE API 显示所有 Java 组件的技术图清楚地将 Jav
  • Hibernate 4 字节码增强不适用于脏检查优化

    我正在使用 Hibernate 4 3 6 并且我使用了最新的Maven 字节码增强 http vladmihalcea com hibernate 4 bytecode enhancement 使所有实体提高自我肮脏意识 我添加了mave
  • 在 Eclipse 中隐藏重复的工具栏项

    我不知道如何 但我的 STS 有重复的工具栏项目 我不知道如何删除它们 这是我复制的工具栏的样子 我想摆脱这些 我试图隐藏工具栏 但这没有帮助 有人知道如何删除重复的吗 自从升级到 Oxygen 以来 我一直遇到同样的问题 我无法可靠地重现
  • APNS(Apple 推送通知服务器)的反馈服务

    我们正在使用Java作为推送通知提供商APNS I我能够将消息发送到APNS但我不知道如何获得该消息的反馈 请帮忙 反馈服务具有类似于用于发送推送通知的接口的二进制接口 您可以通过以下方式访问生产反馈服务feedback push appl
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 如果主引用指向 null,WeakReference 或 SoftReference 有何不同

    我正在读关于WeakReference https docs oracle com javase 10 docs api java lang ref WeakReference html and SoftReference https do
  • 如何添加 Java 正则表达式实现中缺少的功能?

    我是 Java 新手 作为一名 Net 开发人员 我非常习惯Regex Net 中的类 Java 实现Regex 正则表达式 还不错 但它缺少一些关键功能 我想为 Java 创建自己的帮助器类 但我想也许已经有一个可用的了 那么 是否有任何
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 为本地@ExceptionHandler编写JUnit测试

    我有以下控制器 class Controller ResponseStatus HttpStatus OK RequestMapping value verifyCert method RequestMethod GET public vo
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • Java:不使用 Arrays.sort() 对整数数组进行排序

    这是我们 Java 课程的练习之一中的说明 首先 我想说我 做了我的功课 我不仅仅是懒惰地请 Stack Overflow 上的人帮我回答这个问题 在所有其他练习中 这个特定项目一直是我的问题 因为我一直在努力寻找 完美的算法 编写JAVA
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 在Java中将日期“2020-05-22T12:51:20.765111Z”解析为Instant [重复]

    这个问题在这里已经有答案了 如何解析 2020 05 22T12 51 20 732111Z Java 中的 Instant I used LocalDateTime parse startTime DateTimeFormatter of
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材

随机推荐

  • TCP/IP协议:传输层之UDP

    一 UDP用户数据报协议 它是一个无连接的 面向数据报的协议 它不提供可靠性但传输速度比TCP要快 UDP数据报中的 UDP长度 为两个字节 所以我们要发送的UDP数据最多支持65507大约68K的数据 超过该大小的话需要自己来分割发送 使
  • JAVA如何连接redis以及Springboot整合redis详解

    1 java连接redis 1 1 java连接单机redis 首先创建一个普通的maven工程 1 引入依赖
  • 我发现了一个很好看的字体,霞鹜文楷!如何换windows和typora字体?

    1 字体 官方地址如下 下载也很简单 https github com lxgw LxgwWenKai 有1W多的stars 方式 直接打包下载 下载不来 可以联系在下面留言 然后ttf的文件 全部安装就行了 2 更换系统字体 然后换win
  • Codeforces Round 871 (Div. 4)G. Hits Different

    G Hits Different 题意 给一个如图所示的三角形 输入n 击倒方块n 获得分数n n 同时方块n上面的两个方块也会落下 同时获得这两个方块的分数 一直向上走 知道方块1 如图所示为n 9的时候掉落的方块 求获得的分数 思路 先
  • python对csv文件取特定列生成新csv文件

    import csv import os def file name in file out file reader csv reader in file header next reader data header format head
  • 用C语言写一个类似天天酷跑游戏(图形库用easyx)

    1 头文件 全局变量和结构体 a 玩家结构体 b 枚举玩家三种状态 奔跑 跳跃 滑行 c 障碍物结构体 d 障碍物结点 e 枚举出障碍物类型 include
  • Java做运维之配置多服务器间SSH免密登录

    Java做运维之配置多服务器间SSH免密登录 说明 第一步 引入依赖 第二步 编写核心操作类 1 RmtShellExecutor 2 CommonStringUtil 3 IoUtil 4 SshAccount 5 SshNoPwdUti
  • HTML、CSS及JS之间的区别浅谈

    HTML CSS 和 JS 是构建网页的三种核心技术 HTML Hypertext Markup Language 是一种标记语言 用于描述网页的结构和内容 通过 HTML 开发人员可以创建网页元素 例如标题 段落 列表 链接和图像等 CS
  • 嵌入式开发之移植MQTT到RK3568

    目录 前言 一 下载qmqtt源码 二 编译库文件 三 移植到RK3568 3 1 移植动态库libQt5Qmqtt 四 联机测试 4 1 制作demo 4 1 1 创建demo新项目 4 1 2 添加network模块支持 4 1 3 添
  • Mac下编译WebRTC(Mac和iOS版本)

    前言 随着新冠疫情的影响 这两年音视频的需求呈爆发式增长 在音视频领域中 WebRTC可以说是一个绕不开宝库 包括了音视频采集 编解码 传输 渲染的全过程 本文主要记录下在Mac平台上编译WebRTC Mac和iOS版本的全过程 设置代理
  • 网页设计大作业-五子棋游戏,可以进行双人对弈

    游戏如下动态图 下载链接在文末 点我免积分下载资源 资源链接 https download csdn net download weixin 43474701 34854310
  • tp886n设置虚拟服务器,TP-Link TL-WR886N V4-V5设置虚拟服务器方法

    本文主要介绍了TP Link TL WR886N V4 V5路由器上 设置虚拟服务器 端口映射 的方法 注意是V4 0和V5 0版本的TL WR886N路由器上虚拟服务器设置方法 因为 目前TL WR886N路由器有V2 0 V3 0 V4
  • 【华为OD机试真题 JAVA】第k个排列

    JS版 华为OD机试真题 JS 第k个排列 标题 第k个排列 时间限制 1秒 内存限制 262144K 语言限制 不限 给定参数n 从1到n会有n个整数 1 2 3 n 这n个数字共有 n 种排列 按大小顺序升序列出所有排列情况 并一一标记
  • vue 子组件未渲染完成,通过refs调用报错,解决办法。

    在 Vue 中 如果父组件调用子组件的方法时因为子组件未渲染完成而出现错误 一种解决方法是使用 nextTick 方法来等待子组件渲染完成后再进行操作 具体做法如下 在父组件中使用 ref 属性给子组件命名 例如 在模板中给子组件命名为 m
  • C++调用Python程序,无法解析的外部符号 __imp___Py_RefTotal

    C 调用python程序时 出现如下问题 无法解析的外部符号 imp Py RefTotal 无法解析的外部符号 imp Py NegativeRefcount 该符号在函数 import array 中被引用 这是由于安装的python为
  • Linux运维实战:Linux清理僵尸进程

    一 僵尸进程简介 官方解释 当子进程比父进程先结束 而父进程又没有回收子进程 释放子进程占用的资源 此时子进程将成为一个僵尸进程 一般在系统中僵尸进程的关键字为defunct或者dead 僵尸进程一般指进程已经死了或者已经停止运行了 但是它
  • Netty---入门程序,搭建Websocket 服务器

    Netty 常用的场景 1 充当HTTP 服务器 但Netty 并没有遵循servlet 的标准 反而实现了自己的一套标准进行Http 服务 2 RPC 远程调用 在分布式系统中常用的框架 3 Socket 长连接 需要了解的名词 1 Ni
  • 什么是RPC并实现一个简单的RPC

    1 基本的RPC模型 主要介绍RPC是什么 基本的RPC代码 RPC与REST的区别 gRPC的使用 1 1 基本概念 RPC Remote Procedure Call 远程过程调用 简单的理解是一个节点请求另一个节点提供的服务 本地过程
  • screen 使用

    screen 是一款能够实现多窗口远程控制的开源服务程序 基本使用 安装screen yum install screen 创建blackup会话 scrren S blackup 查看已有会话列表 screen ls 恢复会话 scree
  • RabbitMQ消息确认机制

    消息确认 基本流程 说明 生产者发送消息到RabbitMQ Server后 RabbitMQ Server需要对生产者进行消息Confirm确认 消费者消费消息后需要对 RabbitMQ Server进行消息ACK确认 消息确认模式 Rab