RabbitMQ(七)发布者确认机制--事务

RabbitMQ消息确认机制 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话,默认情况下发布操作是不会返回任何信息给生产者的,也就是默认情况下我们的生产者是不知道消息有没有正确到达broker的,如果在消息到达broker之前已经丢失的话,持久化操作也解决不了这个问题,因为消息根本就没到达代理服务器,你怎么进行持久化,那么这个问题该怎么解决呢? . 阅读详情

1.概述

在rabbitmq中,我们可以通过持久化数据解决rabbitmq服务器异常的数据丢失问题。

生产者将消息发送出去后,消息到底有没有到达rabbitmq服务器,默认情况是不知道的。

这就涉及到了发布者的两种确认方式:

  • AMQP实现的事务机制
  • Confirm模式

2.事务机制

channel.txSelect() //用户将当前channel是设置成transaction模式
channel.txCommit() //提交事务
channel.txRollback() //回滚事务

2.1 生产者


public class TxSender {
    private final static String queue_name = "test_queue_tx";

    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(queue_name,false,false,false,null);
        try {
            String msg = "hello tx msg!";
            channel.txSelect(); //将当前channel是设置成transaction模式
//            int i = 1/0;
            channel.basicPublish("",queue_name,null,msg.getBytes());
            System.out.println("send to msg:"+msg);
            channel.txCommit();//提交事务

        } catch (Exception e) {
            channel.txRollback(); //回滚事务
            System.out.println("send to msg error rollback");
            e.printStackTrace();
        }finally {
            channel.close();
            connection.close();
        }

    }
}

2.2 消费者


public class TxRecv {
    private final static String queue_name = "test_queue_tx";

    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(queue_name,false,false,false,null);
        channel.basicConsume(queue_name,new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("recv tx msg:"+new String(body,"utf-8"));
            }
        });
    }

}

 

 

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码) 本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。 阅读详情

相关推荐

RS485/CAN总线防护电路设计:TVS选型与ESD防护实战解析

本文深入解析了RS485与CAN总线防护电路设计中的TVS选型与ESD防护实战技巧。针对工业现场常见的静电放电、浪涌等干扰,文章详细阐述了TVS管关键参数的选择、多级防护体系的构建,并特别强调了在隔离电路设计中地回路处理的重要性,帮助工程师设计出更可靠的通信接口。

metaverse5vr的博客 384

RabbitMQ的发布确认机制

1、发布确认的原理 生产者将信道设置成confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始), 一旦消息被投送到匹配的队列之后,broker就会发送一个确认消息给生产者(包含消息唯一的ID), 如果消息和队列是可持久化的,那么确认消息将在写入磁盘之后发送确认消息给生产者 confirm模式最大的好处就是异步的,可以一边等待消息的返回,同时可继续发布下一条消息。 当消息最终得到确认之后,生产者应用便可以通过回调方法来处理该确认消息, 如果 RabbitMQ 因为自身内部错误导致消

qq_37129192的博客 1180

Labwindows CVI写上位机与STM32下位机通信(二)

接着上篇,这篇主要谈谈流量计数据读取。我们使用的MEMS流量计采用Modbus协议Modbus 使用RS-485 作为硬件载体。 一. Modbus协议   该协议定义了 Modbus 总线Master(主设备)与Slave(从设备)之间的通讯报文格式,对于主设备来说,Modbus 协议是联系上位机(如PC、PLC、HMI 等)的接口,而且所有的通讯都是“透明的”。控制器通信使用主-从技术,即

yang2011079080010的专栏 1万+

RabbitMq 消息确认和退回机制

生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID (从 1 开始),一旦消息被投递到所有匹配的队列之后,broker 就会发送一个确认给生产者 (包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列了,(单个),broker 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号。

szchen2的博客 1211

保姆级教程:在NXPS32144环境下安装EB TRESOS 29.0.0并配置MCAL开发环境

本文提供了一份详细的保姆级教程,指导如何在NXP S32K144环境下安装EB TRESOS 29.0.0并配置MCAL开发环境。内容涵盖从前期资源准备、软件安装步骤、核心的MCAL关联配置,到首次创建AUTOSAR工程并进行模块配置的全流程,旨在帮助汽车电子开发者搭建稳定、可用的底层软件开发地基。

wind6的博客 953

ICC II 时钟树综合(CTS)前奏:从约束定义到NDR规则的全方位设置指南

本文详细介绍了ICC II中时钟树综合(CTS)的前期准备工作,包括约束定义、NDR规则设置和时钟平衡点控制等关键步骤。通过实际案例和代码示例,指导工程师如何优化时钟偏斜、插入延迟和信号质量,确保芯片设计的时序收敛和性能稳定。特别强调了非默认布线规则(NDR)在时钟网络设计中的重要性。

weixin_42530458的博客 212

RabbitMQ(三)发布确认

mq发布确认

agululu的博客 680

20、Citrix 云桌面常见VDA注册问题汇总

本文总结了与 VDA 中出现的 VDA 会话断开连接、注册、会话卡住以及挂起/崩溃相关的主要支持文章。

我在Citrix、VMware、Veeam、微软和NVIDIA等领域拥有丰富经验的专业人士,专注于设计和维护虚拟化基础设施、实施备份与灾难恢复策略,致力于优化企业的IT环境。 942

3. RabbitMQ高级

1. RabbitMQ事务如何知道生产者投递的消息是否成功抵达RabbitMQ Broker呢?RabbitMQ提供了两种方式来确认☐ 事务机制☐ 发布者确认机制RabbitMQ客户端中与事务机制相关的方法有三个:☐ channel.txSelect:用于将当前的信道设置成事务模式(也可以理解为开启事务)☐ channel...

qt1360726014的博客 433

【蓝牙协议栈】【BLE】详解蓝牙BLE连接建立过程

advertiser。发出广播的设备observer或者scanner。可以扫描广播的设备initiator。能发起连接的设备master或者central。连接成功后的主设备,即主动发起packet的设备slave或者peripheral。连接成功后的从设备,即被动回传packet的设备图11通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。

风云说通信 2519

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RabbitMQ基础概念详细介绍

RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务器端用Erl...

woailuohui的专栏 9482

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RabbitMQ事务机制和确认机制

1.1事务机制:发送消息前,开启事务(channel.txSelect()),然后发送消息,如果发送过程中出现什么异常,事务就会回滚(channel.txRollback()),如果发送成功则提交事务(channel.txCommit())。需要注意的是,事务机制会对性能产生一定的影响,因为它需要进行额外的操作来维护事务的一致性。使用事务机制时,可以在发送消息之前开启一个事务,在事务内发送消息并进行确认提交,以确保消息被正确地发送到 RabbitMQ 中。确认可以是单条消息的确认,也可以是批量消息的确认。

刘皇叔说Java的博客 4119

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RabbitMQ消息确认机制(ACK)

1、消息确认机制(ACK) 为了保证消息从队列可靠的达到消费者,RabbitMQ 提供了消息确认机制(Message Acknowledgement)。消费者在订阅队列时,可以指定 autoAck 参数,当 autoAck 参数等于 false 时,RabbitMQ 会等待消费者显式地回复确认信号后才从内存(或者磁盘)中移除消息(实际上是先打上删除标记,之后在删除)。当 autoAck 参数等于 true 时,RabbitMQ 会自动把发送出去的消息置为确认,然后从内存(或者磁盘)中删除,而不管消费者是否

pan_junbiao的博客 4万+

RabbitMQ自学之路(七)—— RabbitMQ消息发送确认与消息接收确认机制

通常,一个消息被消费者消费后,就会从Queue中移除了。这是因为RabbitMQ默认会在消息被消费者接收后,立即确认。 但存在丢失消息的可能,如果消费端消费逻辑抛出异常,也就是消费端没有处理成功这条消息,那么就相当于丢失了消息。 另外一种情况就是,我们在spring中处理消息时,即使消息处理没出异常,但是后续代码出异常造成回滚,这样其实也相当于丢失消息。 所以一般情况下,手动确认要比较好一些。 达...

互联网叫兽 9253

RabbitMQ之消息确认机制(事务+Confirm)

概述 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话,默认情况下发布操作是不会返回任何信息给生产者的,也就是默认情况下我们的生产者是不知道消息有没有正确到达broker的,如果在消息到达broker之前已经丢失

朱小厮的博客 13万+

RabbitMQ (十二) 消息确认机制 - 发布者确认

消费者确认解决的问题是确认消息是否被消费者"成功消费". 它有个前提条件,那就是生产者发布的消息已经"成功"发送出去了. 因此还需要一个机制来告诉生产者,你发送的消息真的"成功"发送了. 在标准的AMQP 0-9-1,保证消息不会丢失的唯一方法是使用事务:在通道上开启事务,发布消息,提交事务.但是事务是非常重量级的,它使得RabbitMQ的吞吐量降低250倍.为了解决这个问题,RabbitM...

weixin_30294295的博客 164

RabbitMQ(七)发布者确认机制--confirm

1.概述 发布者确认是实现可靠发布的RabbitMQ扩展。在通道上启用发布者确认后,代理将异步确认客户端发布的消息,这意味着它们已在服务器端处理。 发布者确认是AMQP 0.9.1协议的RabbitMQ扩展,因此默认情况下未启用它们。 1.1 confirm模式的实现原理: 生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上面发布的消息都会被指派要给唯一...

java_shm的专栏 724

RabbitMQ(七)ACK 消息确认机制

RabbitMQ(七)ACK 消息确认机制

ACGkaka的博客 3675

(10)RabbitMQ生产者确认:事务与confirm机制

上节介绍了RabbitMQ的消息持久化、Ack和重回队列,本节会继续介绍RabbitMQ的高级特性,将会介绍一下RabbitMQ的生产者确认的两种模式:事务与confirm机制。 概述 我们上一节介绍了RabbitMQ的事务机制,在RabbitMQ broker因为某些原因崩溃、重启时,可以确保消息不会丢失。但是我们发送完消息之后,并不知道消息有没有真的发到了RabbitMQ服务器上并存储完毕...

没头脑遇到不高兴 5462

RabbitMQ:发布者消息事务TX的使用

1.声明 当前内容主要用于本人学习和复习之用,当前内容为如何使用发布者事务 2.测试使用发布者事务 这里直接使用txSelect()开启事务确认,通过txCommit()进行事务提交,通过txRollback()进行事务回滚 public class TxTest { public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory = new Connecti

编程学习者的博客 717

RabbitMQ-消息确认机制(事务+confirm)

1.RabbitMQ-消息确认机制(事务+confirm) 在rabbitMQ中我们可通过持久化数据,解决rabbitMQ因为服务器异常造成的数据丢失 问题:生产者将消息发送出去之后,消息是否到底rabbitMQ服务器? 默认情况下不可得知的 有两种方式可以获得状态 AMQP协议:AMQP实现了事务机制 Confirm模式 2.事务机制 TxSelect Tx...

了无牵挂者忘生,心有所爱者忘死 3万+

【MQ篇】RabbitMQ的消费者确认机制实战!

RabbitMQ 把消息发给消费者,如果消费者还没来得及处理完就“嗝屁了” 😵‍💫(程序崩溃、网络断开、处理异常),那这条消息对于 RabbitMQ 来说可能已经“送达”了,然后就被无情地从队列里删除了!如果在收到确认信号之前,消费者断开连接了,或者明确表示处理失败了,RabbitMQ 就会知道这条消息“有问题”,会考虑把这条消息重新发给其他消费者,或者等这个消费者恢复后再发给它。但如果家里没人,包裹被风吹走了 💨,或者被隔壁老王的狗叼走了 🐶📦💥,或者你拿到包裹后,手一滑掉粪坑里了 🚽…

qq_56158663的博客 3549

后端面试必备:RabbitMQ的事务机制详解

RabbitMQ的事务机制是一种确保消息可靠投递的方式,它允许生产者将一组操作(如发送多条消息)作为一个原子单元执行,要么全部成功,要么全部失败回滚。

qq_58299462的博客 1262
上一篇: RabbitMQ(六)Topics 主题
下一篇: RabbitMQ(七)发布者确认机制--confirm
夜未眠shm
博客等级 码龄14年 15粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值