RabbitMQ事务确认机制(生产者)

记录:N10激光雷达串口编程,将数据存进 SQLite,并进行 ROS2 - cartographer 单雷达建图 N10 系列采用 TOF(time of flight)测距原理,通过测量调制激光的发射、返回时间差来测量物体与传感器的相对距离。激光发射器发出调制脉冲激光,内部定时器开始 从t1时刻计算时间,当激光照射到目标物体后,部分能量返回,当雷达接收到返回的激光信号时,在t2时刻停止内部定时器计时,光速C,激光雷达到达物体的距离D为:经过N10系列激光雷达内嵌的信号处理单元的实时解算得到探测物体的距离值,结合高精度自适应角度测量模块输出的角度信息,可以得到量程内周围 360 度环境 的二维平面信息。 阅读详情

RabbitMQ事务确认机制(生产者)

消息确认机制

  生产者 

  消费者

  消费者如何确保消息一定消费成功

 

队列和消费者建立长连接,推送或者拉取形式。

消费者通过自动应答或者手动应答,队列服务器等待应答结果,如果没有应答结果那么保留给下一个消费者。

 

问题产生背景:
生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后面的逻辑出问题了,我们不想要发送之前的消息了,需要撤回该怎么做。
解决方案:
1.AMQP 事务机制
2.Confirm 模式
事务模式:
txSelect 将当前channel设置为transaction模式 (开启事务)
txCommit 提交当前事务   (提交事务)
txRollback 事务回滚   (回滚事务)

 

如果RabbitMQ服务器宕机了,消息会丢失吗?  

RabbitMQ支持消息持久化机制,把消息持久化到硬盘上。

Producer:

package com.toov5.amqp;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.toov5.utils.MQConnectionUtils;

public class Producer {
    // 队列名称
    private static final String UEUE_NAME = "test_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建新的连接
        Connection connection = MQConnectionUtils.newConnection();
        // 创建Channel
        Channel channel = connection.createChannel();
        // 创建队列
        channel.queueDeclare(UEUE_NAME, false, false, false, null);
        channel.basicQos(1); // 保证 取一个消费
            try {
                channel.txSelect();    //开启事务
                // 创建message
                String msg = "toov5_message";
                System.out.println("生产者投递消息" + msg );
                // 生产者发送消息
                channel.basicPublish("", UEUE_NAME, null, msg.getBytes());
                int i = 1/0;
                channel.txCommit();   //提交事务
            } catch (Exception e) {
                System.out.println("生产者消息事务已经回滚");
                channel.txRollback();   //回滚事务
            }finally {
                // 关闭通道和连接
                channel.close();
                connection.close();

            }            
            
        }
    
    }

consumer:

package com.toov5.amqp;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.toov5.utils.MQConnectionUtils;

public class Consumer1 {
  
     //队列名称
        private static final String QUEUE_NAME = "test_queue";
        
        public static void main(String[] args) throws IOException, TimeoutException {
            System.out.println("消费者启动..........1");
            //创建新的连接
        Connection connection = MQConnectionUtils.newConnection();
           //创建Channel
            final Channel channel = connection.createChannel();
            // 消费者关联队列
             channel.queueDeclare(QUEUE_NAME, false, false, false, null);
             channel.basicQos(1);
              DefaultConsumer defaultConsumerr = new DefaultConsumer(channel) {
                  //监听获取消息
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                            byte[] body) throws IOException {
                        String msg =new String(body,"UTF-8");
                        System.out.println("消费者获取生产者消息:"+msg);
                        try {
                            //模拟应答等待时间
                            Thread.sleep(1000);
                        } catch (Exception e) {
                            
                        }finally {
                           channel.basicAck(envelope.getDeliveryTag(), false);  //手动应答 告诉消息队列服务器 消费成功
                        }
                    }
              };
            //牵手模式设置  默认自动应答模式  true:自动应答模式  
              channel.basicConsume(QUEUE_NAME, false, defaultConsumerr);//    fanse手动应答          

        }
}

结果:

 

上面可以做个AOP~~

 

 可以参考下 Confirm模式

16、AI与无人机助力紧急器官移植及医疗物资运输 本文探讨了AI与无人机(UAV)集成模型在紧急器官移植和医疗物资运输中的应用。传统运输方式受限于交通、时间和环境因素,而基于图神经网络(GNN)的AI-UAV系统可实现高效、智能、全天候的医疗物资配送,具备实时温湿度监控、自动导航和适应复杂地形等优势。文章分析了该模型在血液、器官运输中的关键作用,展示了其在澳大利亚、中国、美国等国的实际应用案例,并通过表格与流程图说明运作机制。同时,文章还探讨了技术、法规和社会层面的挑战及应对策略,展望了未来技术融合、应用拓展和国际合作的发展趋势,凸显其在全球医疗物流中的广 阅读详情

相关推荐

产品必备技能(十):如何绘制原型图?先要绘制页面流程图+页面原型图!附实操原型图、流程图实例(抖音)

文章目录目标题目实操步骤模板实操【抖音】APP的视频发布功能页面流程绘制页面流程图合格标准绘制页面原型图合格标准 目标 新入行的产品经理都对原型抱有向往的心境,但是有经验的产品经理不会一上来就画原型,而是先画页面流程再来画原型。通过学习,你将学会如何用页面流程图规划用户行为路径、如何借助原型识别问题、减少风险、有效沟通。 题目 任意选择一款你喜欢的产品,体验某个功能,下载并梳理此功能至少5个以上的页面流程跳转点(后面会解释),还原2 - 3个主要界面的低保真原型图。 实操步骤 可使用手绘以及Process

汪雯琦的博客 4842

RabbitMQ消息确认机制

本文讲解了RabbitMQ消息确认机制,消息是否需要确认,我们需要根据业务的场景来分析。

Chenhui98的博客 1665

Flutter热更新实战:Shorebird从安装到发布补丁的完整流程(含iOS/Android差异解析)

本文详细介绍了Flutter热更新工具Shorebird的完整使用流程,包括安装、发布补丁及iOS/Android平台差异解析。Shorebird作为Flutter官方未提供的Code Push解决方案,能快速修复线上问题,支持合规性保障和性能优化,特别适合紧急修复场景。文章还涵盖了国内CDN加速配置和最佳实践,帮助开发者高效实现热更新。

butter的博客 1079

RabbitMQ确认机制

RabbitMQ——确认机制

m0_60500421的博客 1903

ovs实现lb负载均衡

负载均衡器的实现原理是通过硬件或软件设备将客户端访问流量根据转发策略分发到多个服务器或设备上,以确保系统的负载均衡。二层负载均衡‌:使用虚拟MAC地址方式,根据OSI模型的二层进行负载均衡。‌四层负载均衡‌:基于IP+端口的负载均衡,主要分析IP层及TCP/UDP层,实现四层负载均衡。‌七层负载均衡‌:从应用层开始,根据虚拟的URL或IP、主机名接收请求,再转向相应的处理服务器。

bobi的博客 953

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台 文章目录智慧物流大数据平台一、项目背景二、逻辑架构三、解决方案技术亮点:数据流转四、项目的技术选型4.1流式处理平台4.2 分布式计算平台4.3 海量数据存储框架软件版本总结 一、项目背景 本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖

weixin_48143996的博客 6431

RabbitMQ高级篇

每个RabbitTemplate只能配置一个ReturnCallback,因此需要在项目加载时配置:@Slf4j@Override// 获取RabbitTemplate// 设置ReturnCallback// 投递失败,记录日志log.info("消息发送失败,应答码{},原因{},交换机{},路由键{},消息{}",// 如果有业务需要,可以重发消息});ConfirmCallback可以在发送消息时指定,因为每个业务处理confirm成功或失败的逻辑不一定相同。

厚积薄发 2541

医学图像可视化实战:ITK-SNAP与Python+SimpleITK双方案解析

本文深入解析了医学图像可视化的两大核心方案:ITK-SNAP与Python+SimpleITK。ITK-SNAP作为专业无损浏览器,是数据探索与分析的必备工具;而Python+SimpleITK方案则提供了自动化处理能力,但需注意将.nii.gz数据转换为JPG等格式时的信息损失。文章通过实战对比,为医学影像处理者提供了清晰的选择指南与避坑建议。

ol789012的博客 490

RabbitMq生产者和消费者消息确认机制(ack)

RabbitMQ消息确认的本质也就是为了解决RabbitMQ消息丢失问题,因为哪怕我们做了RabbitMQ持久化,其实也并不能保证解决我们的消息丢失问题RabbitMQ的消息确认有两种。

qq_40083897的博客 9501

Python 爬虫实战:爬取哔哩哔哩知识区,抓取高赞课程信息

哔哩哔哩(Bilibili)是一个广受欢迎的综合性视频社区,其中的知识区汇聚了大量优质的教育、科普、技术等课程内容。本文将指导读者如何使用 Python 爬虫技术从哔哩哔哩知识区抓取高赞课程信息,并进行数据分析。本文深入探究了利用 Python 爬虫技术从哔哩哔哩知识区抓取高赞课程信息的全流程。从前期的环境搭建、模拟登录,到核心的课程数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。通过此方法所获取的数据,能够助力创作者优化内容、用户发现优质课程、平台洞察用户需求。

u014481728的博客 1137

三、参考比较法之城市建成区提取——提取

在正式开始提取之前,还是要继续啰嗦一下,其实基于夜间灯光数据建成区提取,可以分为好几个层次,基于县一级、市一级、省一级,很多论文的做法都是以市一级为准,也就是统计好市一级城市的每一年的统计年鉴中的建成区面积作为备用。有人可能会问为什么不以县一级,由于县一级的统计数据一般存在缺失,很难形成一个长时间序列的数据,所以一般采取的是市一级。前文也进行建议,如果确实要基于县一级进行提取可以参考前面理论介绍那篇文章中的相关建议。那么当我们确定阈值后如何将城市建成区提取出来?

端木宛白的博客家园 5401

RabbitMQ高级特性----生产者确认机制

题记:在Java微服务开发中,对于一个功能需要调用另一个服务下的功能才能实现的情况,我们通常会使用异步调用取代同步调用,进而实现增强业务的可拓展性和实现故障隔离以及流量削峰填谷的目的。而消息队列就是异步调用的解决方案之一。不过在使用消息队列实现异步调用的时候,可能会出现消息无法传递到位进而导致业务信息出现差异的情况,因此消息的传递的可靠性就显得尤为重要。

Mqy_hao的博客 1678

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

全网最详细的YOLOv5项目源码解读之训练部分train. py。全文近5万字!代码逐行注释,逐段讲解,小白入门必备!

路人贾的博客 3万+

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

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

没头脑遇到不高兴 5462

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

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

RabbitMq消息确认机制之生产者AMQP事务确认,消费者手动ack确认(四)

生产者AMQP事务确认 消费者手动ack确认 (一)生产者AMQP事务确认    我们知道事务可以保证消息的传递,使得可靠消息最终一致性。接下来我们先来探究一下RabbitMQ的事务机制。 RabbitMQ中与事务有关的主要有三个方法: txSelect() txCommit() txRollback() txSelect主要用于将当前channel设置成tr...

weixin_41987908的博客 1106

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【RabbitMQ Learning Journey】生产者消息确认机制,amqp事务

(内容来源于蚂蚁课堂) 1.消费者如何确保消息一定被消费成功? 通过手动应答(默认自动应答) 2.RabbitMQ服务器宕机了,消息会丢失吗? 默认会丢失,需要设置持久化 durable=true; 3.如何确保生产者一定会投递到MQ服务上? 生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后 ...

开发学习工作日志 215

RabbitMQ事务机制

生产者确认机制: 默认情况下发送消息的操作是不会返回任何信息给生产者的,也就是默认情况下生产者是不知道消息有没有正确的到达服务器, 如果在消息到达服务器之前就已经丢失了,持久化操作也解决不了问题。 RabbitMQ针对这个问题,提供了两种解决方式: 通过事务机制实现 通过发送方确认(publisher confirm)机制实现 事务机制: Ra...

qq_34579060的博客 548

使用IDEA开发RabbitMQ教程系列(五)RabbitMQ可靠性投递生产者确认机制

1、前言 上一篇文章我们详细介绍了Queue队列和Message消息,本章节我们主要聊一聊RabbitMQ使用必须考虑的问题,就是消息可靠性!在生产环境下如何确保消息的可靠性投递,我们首先需要考虑两个问题 1、生产者发送消息,是否发送成功? 2、消费者接收消息如何确认以及拒绝? 当然我们所说的可靠并非一个绝对的概念,因网络、硬件、不可抗因素等;可靠性是一个相对的概念,在条件合理的范围内系统所能确保...

Micro麦可乐的博客 1万+

rabbitmq生产者消息确认机制

rabbitmq生产者消息确认机制 问题描述 当生产者发送消息给rabbitmq服务器时,消息是否真正的到达了服务器?为了保证生产者发送的消息能够可靠的发送到服务器(即消息落地),rabbitmq提供了两种方式: 通过事务实现 通过发送方确认机制(publisher confirm)实现 事务机制 rabbitmq与事务相关的方法: channel.txSelect(): 将当前信道设置成事...

面朝大海,春暖花开 4832

rabbitMQ之消息确认

https://blog.youkuaiyun.com/weixin_44106334/article/details/104591486

weixin_44005092的博客 1396

RabbitMQ整合Spring Booot【生产者事务确认机制】

package com.toov5.amqp; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com....

art_code的博客 122

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

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

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

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

事务机制RabbitMQ中与事务机制有关的方法有三个,分别是Channel里面的txSelect(),txCommit()以及txRollback(),txSelect用于将当前Channel设置成是transaction模式,txCommit用于提交事务,txRollback用于回滚事务,在通过txSelect开启事务之后,我们便可以发布消息给broker代理服务器了,如果txCommit提交成功

刘越洋子 806

RabbitMQ:生产者确认

在使用RabbitMQ的时候,可以通过消息持久化操作来解决因为服务器的异常崩溃而导致的消息丢失。除此之外,我们还会遇到一个问题,当消息的生产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?如果不进行特殊配置,默认情况下发送消息的操作是不会返回任何信息给生产者的,也就是默认情况下生产者是不知道消息有没有正确地到达服务器。如果在消息到达服务器之前已经丢失,持久化操作也解决不了这个问题,因为消息根本没有到达服务器,怎么持久化?RabbitMQ针对这个问题,提供了两种解决方案: 通过事务机制实现。 通过生

上海一九四三 839

RabbitMQ消息确认机制之事务机制

一问题提出 生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后面的逻辑出问题了,我们不想要发送之前的消息了,需要撤回该怎么办。 二解决方案 1 AMQP 事务机制 2 Confirm 模式 本次关注事务机制 三事务机制说明 AMPQ提供了以下几个方法: txSelect 将当前channel设置为tr...

实践求真知 441

RabbitMq中的生产者确认机制

在使用RabbitMq的时候,可以通过消息持久化操作来解决服务器异常崩溃导致的消息丢失,但是如何保证消息正常到达RabbitMq呢? 事务机制 RabbitMq中与事务相关的操作一共有三个:channel.txSelect,channel.txCommit,channel.txRollback。channel.txSelect用于将当前信道设置为事务模式,channel.txCommit用于事务提...

Lvlht的博客 2287

RabbitMQ的消息确认机制有哪些类型?

这些确认机制共同作用,使得 RabbitMQ 能够提供高可靠性的消息传递服务。根据实际需求,你可以选择适合的确认机制组合来满足你的业务需求。RabbitMQ 的消息确认机制是确保消息可靠传递的重要组成部分。

qq_33240556的博客 651
上一篇: RabbitMQ整合Spring Booot【Exchange-Topics模式】
下一篇: RabbitMQ整合Spring Booot【生产者事务确认机制】
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值