rabbitmq中confirm和return模式的使用

RabbitMQ的confirm模式、return模式,以及消费端的手动确认ACK,以及死信队列的简单使用 前言 在消息中间件的实际使用中如何保证消息的可靠性是我们必须要考虑的,因此就需要了解一下Rabbitmq的confirm模式、return模式,以及消费端的手动确认ACK等等了。 1、confirm模式: 此模式是作用在生产端的,开启了这个模式就可以知道消息有木有发送到exchange上。不管有没有发送到都会触发回调方法。 2、return模式: 此模式同样是作用在生产端的,这个模式就是为了知道消息有木有发送到对应的队列上。如果发送到了对应的队列不会触发回调方法,如果没有发送到对应的队列才会触发回 阅读详情
  • confirm模式

开启confirm模式channel.confirmSelect();

这种模式,消息到达交换机时触发,若成功/失败到达交换机时,调用成功/失败回调函数。

import com.rabbitmq.client.*;

import java.io.IOException;

public class Sender {
    public static void main(String[] args) {
        ConnectionFactory factory = RabbitmqUtils.getConnectionFactory();
        Connection connection;
        Channel channel;
        try {
            connection = factory.newConnection();
            channel = connection.createChannel();
            channel.queueDeclare("direct-queue", false, false, false, null);
            channel.confirmSelect();
            channel.addConfirmListener(new ConfirmListener() {
                public void handleAck(long deliveryTag, boolean multiple) throws IOException {
                    System.out.println("ack:deliveryTag:" + deliveryTag + ",multiple:" + multiple);
                }
                public void handleNack(long deliveryTag, boolean multiple) throws IOException {
                    System.out.println("nack:deliveryTag:" + deliveryTag + ",multiple:" + multiple);
                }
            });
            for (int i = 0; i < 100; i++) {
                channel.basicPublish("", "direct-queue-1", null, "hello world".getBytes());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

只要到达了交换机(此处""是默认交换机),就会调用回调方法。

  • return模式

只有成功到达了交换机且未到达队列才会触发回调函数。

basicPublish方法参数boolean mandatory默认是false,需要设置为true。

package fun.gosuncn.test1;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Sender {
    public static void main(String[] args) {
        ConnectionFactory factory = RabbitmqUtils.getConnectionFactory();
        Connection connection;
        Channel channel;
        try {
            connection = factory.newConnection();
            channel = connection.createChannel();
            channel.queueDeclare("direct-queue", false, false, false, null);
            channel.addReturnListener(new ReturnListener() {
                @Override
                public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.err.println("---------handle  return----------");
                    System.err.println("replyCode: " + replyCode);
                    System.err.println("replyText: " + replyText);
                    System.err.println("exchange: " + exchange);
                    System.err.println("routingKey: " + routingKey);
                    System.err.println("properties: " + properties);
                    System.err.println("body: " + new String(body));
                }
            });
            for (int i = 0; i < 100; i++) {
                channel.basicPublish("", "direct-queue-1", true, null, "hello world".getBytes());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

channel.basicPublish("", “direct-queue-1”, true, null, “hello world”.getBytes());

第三个参数设置为true。

动力节点rabbitmq笔记-12-17RabbitMQ消息Confirm模式 消息的confirm确认机制,是指生产者投递消息后,到达了消息服务器Broker里面的exchange交换机,则会给生产者一个应答,生产者接收到应答,用来确定这条消息是否正常的发送到Broker的exchange中,这也是消息可靠性投递的重要保障; 阅读详情

相关推荐

手把手教你用Logisim搭建5级流水MIPS CPU(附华中科技计组实验避坑指南)

本文详细介绍了如何使用Logisim从零构建5级流水MIPS CPU,特别针对华中科技大学计算机组成原理实验提供实用指南。内容涵盖单周期CPU过渡、流水线寄存器设计、数据冒险处理等核心环节,并附有实验避坑建议和性能优化技巧,帮助学生高效完成这一挑战性项目。

weixin_42532938的博客 372

callmode php_PHP实战RabbitMQ之生产者Confirm篇

简介为提高系统高可用,生产者在发送message需要通过MQ回复ACK来确保message被成功存储。注:图片来源微信公众号:架构师之路RabbitMQ官网对Publisher Confirms有相关介绍,可惜example代码没有php版本的,且php-amqplib也是一帮志愿者在维护,精力有限,没有完整的使用examplephp-amqblib也有开发者提了Issues希望完善example...

weixin_39719018的博客 460

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

Springboot——整合Rabbitmq之Confirm和Return详解

文章目录前言为什么会有ConfirmSpringboot 整合 Mq 实现 Confirm 监听机制依赖引入增加配置文件,设定连接信息配置队列、交换机,以及对其进行绑定编写mq消息发送服务编写消息发送接口启动项目进行测试正常测试异常测试什么是Return?增加 ReturnCallback 监听并测试修改 RabbitmqService 配置类测试总结相关代码下载 前言 之前专栏中,对Springboot整合Rabbitmq都有一系列的配置和说明,但总缺少一些必要的描述信息。导致很多看博客的小伙伴会私信问为

专注写bug 4798

STM32CubeMx + FatFs 实战:SD卡DMA传输中断回调问题深度解析

本文深度解析了在STM32CubeMx环境下,结合FatFs文件系统并使用DMA进行SD卡读写时,程序可能出现的“卡死”问题。核心原因在于HAL库的弱函数回调机制未被正确处理,导致DMA传输完成中断后,状态机锁死。文章提供了两种实战修复方案:直接修改HAL库文件或在用户代码中重写回调函数,并给出了关键的配置检查点与调试技巧,帮助开发者彻底解决SD卡DMA传输中断回调失效的难题。

weixin_29176179的博客 330

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

Rabbitmq的confirm和return机制

Rabbitmq在生产者发送到mq的时候可能会发生消息丢失的情况,可以使用事务来解决,但是开启了事务后吞吐量就会极大的下降。所以Rabbitmq提供了一个confirm机制,当消息成功发到exchange时,会触发confirm回调。 Rabbitmq在内部从exchange到queue的过程中也可能出现路由失败的情况,也会导致丢消息。Rabbitmq提供了return机制可以解决这个问题,当我们路由失败时,可以通过return回调来将路由失败的消息记录下来进行处理。 ...

远方的少年 2321

【量化交易】迅投QMT——基础操作新建策略导入策略!

策略指标 #基础操作 #新建策略 在【我的】主页,点击新建策略按钮 点击【pyhton策略】模型 会弹出一个策略编辑器框 【新建策略文件】 编辑完点击【编译】按钮 关闭策略编辑器 导入策略 券商 QMT:1. 点击进入【模型研究】界面2. 右键 -> 选择本地. rzrk导入 投研端:1. 点击【行情】界面,选择模型2. 右键 -> 选择本地. rzrk导入 #策略在副图作为指标运行 在主图上双击策略 VBA策略可以直接输出图像

weixin_eng02048的博客 4104

RabbitMQ确保成功发送数据的Confirm模式与Return模式

一.Confirm模式 确保消息能够从生产者发送到交换机 ,无论消息发送是否成功都执行一个回调方法 开发步骤 1.设置配置文件中ConnectionFactory的publisher-confirm属性为true,以开启Confirm模式 <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"

lvyangxue的博客 2306

课题申报新手入门必备指南!利用AI辅助搞定 6大关键部分,高效提升申报成功率(附AI提示词)

以下是我(或团队)与本课题相关的已有基础:【如:承担过的公开课、校本教研活动、教学改革实践、课程建设、区级/校级课题、教学反思积累等】请你完成以下任务:1)判断哪些内容与本课题的研究目标和内容具有直接或间接关联;以下是我当前的研究设想(可能比较笼统):【填写你的研究想法 / 教学困惑 / 初步设想】,请你帮我完成以下任务:1)先判断该设想中隐含的核心研究问题是什么;以下是我目前拟定的研究目标,请你从课题评审视角进行校正:【逐条粘贴你已有的研究目标】,请你帮我:1)判断每个目标是否具体、清晰、可评估;

智能AI让学术科研更容易 917

Android SurfaceFlinger——概述(一)

对于系统渲染流程的理解是指导 SurfaceFlinger 设计的核心思想,从 Android 4.1 一直到 Android 9.0 都没有太大的变化。只要抓住这五个核心思想,我们阅读 SurfaceFlinger 的难度就会下降不少。下面看一下 SurfaceFlinger 的体系和 Skia 以及 View的绘制流程的关系。framework 面向开发者所有的 View 是便于开发的控件,里面仅仅只是提供了当前 View 各种属性以及功能。

小旭的专栏 2584

springboot整合rabbitMQ confirm 确认模式 return 退回模式

消息的可靠投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。 RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 ⚫ confirm 确认模式 ⚫ return 退回模式 rabbitmq 整个消息投递的路径为: producer—>rabbitmq broker—>exchange—>queue—>consumer ⚫ 消息从 producer 到 exchange 则会返回一个 confirmCallback 。 ⚫ .

weixin_44318244的博客 6962

Python 爬虫实战:就业市场趋势数据抓取与行业洞察

在当今竞争激烈的就业市场中,了解行业趋势和就业形势对于求职者、学生以及人力资源专业人士来说至关重要。通过获取和分析就业市场数据,我们可以深入了解不同行业的招聘需求、薪资水平、技能要求等关键信息,从而为职业规划和人才发展提供有力支持。

yansideyucsdn的博客 1406

RabbitMQ消息可靠性传递-confirm确认模式,return 退回模式

上文:RabbitMQ工作模式 代码地址: https://gitee.com/never_enough/rabbitmqtest 参考RabbitMQ官网:RabbitMQ Tutorials rabbitmq-消息可靠性传递二级目录三级目录 二级目录 三级目录

可控的事情要谨慎,不可控的事情要乐观。 1741

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

springboot 集成 RabbitMQ confirm 确认模式和 return 回退模式以及Consumer Ack模式

springboot 集成 RabbitMQ confirm 确认模式和 return 回退模式以及Consumer Ack模式

xiaotiaoza的博客 1008

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

RabbitMQ高级特性——消息的可靠投递(confirm模式与return模式)

概述 顾名思义,就是MQ在整个msg的生产到消费者接收到msg过程中的可靠性。RabbitMQ提供了一下两种方式来保证消息投递的可靠性: confirm确认模式 return 退回模式 回顾一下rabbitmq整个消息的投递过程 producer--->rabbitmq broker--->exchanger--->queue--->cunsumer confirm确认模式中 producer将消息发送给exchanger时候,将设置confirmCallback,之后消

保暖透气大裤衩LeoLee的博客 1651

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RabbitMQ目录发送方确认confirm:确认模式2.重复调用接口时,会提示错误所以改进,自己搞一个template,return退回模式:RabbitMQ的可靠性

目录 发送方确认 confirm:确认模式 2.重复调用接口时,会提示错误所以改进,自己搞一个template, return退回模式: RabbitMQ的可靠性/保证消息不丢失.. 消息在交换机中无法路由到制定队列:return模式 重试机制

weixin_72953218的博客 1371

RabbitMQ之生产者的消息模式1(Confirm消息确认,Return返回消息)

目录前言两个概念(消息模式的保证)1、消息的100%传递2、幂等性概念provider to broker (生产端到交换机的处理)1、Confirm消息确认机制2、Return返回消息proker to consumer(交换机到消费者之间)后记 前言 本次就是了解一下RabbitMQ的消息模式; 简单的说就是,深入了解。 两个概念(消息模式的保证) 1、消息的100%传递 什么是生产端的可靠性...

旺旺的博客 523

RabbitMQ--确认(confirm)模式、回退(return)模式、ACK、重试机制

spring: rabbitmq: host: port: username: password: virtual-host: / listener: simple: acknowledge-mode: manual #开启手动确认 retry: enabled: true #开启重试 max-attempts: 5 #重试次数 默认3

Eat_a_meal的博客 3712

RabbitMQ的消息Confirm模式与Return消息机制

同样我只是对自己学习做一个总结啊。。本人新手较菜嗯 消息确认模式 消息的确认,是指生产者投递消息给Broker后,如果Broker收到消息,则会给生产端一个回复(reply)。然后生产端便可以接收这个回复,从而可以确认你这条扔到Broker的消息正常到达了Broker。 简单画了张图,大概就是这么个逻辑。 接下来看看实现。 确认消息机制的代码实现 //首先用channel开启确认模式 channe...

weixin_43890718的博客 977

java回调函数与return_rabbitmq进阶:回调函数之确认(confirm)模式、回退(return)模式...

一、确认(confirm)模式运用场景当生产者发送消息至交换机后的 成功或失败 所处理的业务废话不多说,直接上代码开启确认模式spring:rabbitmq:host: localhostport: 5672username: guestpassword: guestvirtual-host: /listener:simple:acknowledge-mode: manual # 消费者手动确认消...

weixin_34533343的博客 684

rabbitmq confirm模式,return,ack,以及限流,死信队列

工具类 package com.lyj.rabbitmq.rabbitmqUtils; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException; import java.util.concurrent.TimeoutExcept...

qq_42962779的博客 624
上一篇: rabbitmq保证消息投递成功的对比分析
下一篇: 设置SELinux的模式
盖了帽
博客等级 码龄8年 17粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值