首页
学习
活动
专区
圈层
工具
发布

【RabbitMq 篇六】-消息确认(发送确认与接收确认)

正文 目录 前言 正文 消息确认种类 消息发送确认 ConfirmCallback ReturnCallback 消息消费确认 消息确认种类 消息的确认做有很多法,其中包括事务机制、批量确认、异步确认等...每一个颜色块之间都存在着消息的确认机制,我们大概分为两大类,发送方确认和接收方确认,其中发送方确认又分为生产者到交换器到确认和交换器到队列的确认。 ?...ReturnCallback 通过实现 ReturnCallback 接口,启动消息失败返回,此接口是在交换器路由不到队列时触发回调,该方法可以不使用,因为交换器和队列是在代码里绑定的,如果消息成功投递到Broker后几乎不存在绑定队列失败...我们知道ACK是默认是自动的,自动确认会在消息发送给消费者后立即确认,但存在丢失消息的可能,如果消费端消费逻辑抛出异常,加入你用回滚了也只是保证了数据的一致性,但是消息还是丢了,也就是消费端没有处理成功这条消息...消息确认模式有: AcknowledgeMode.NONE:自动确认 AcknowledgeMode.AUTO:根据情况确认 AcknowledgeMode.MANUAL:手动确认 长话短说…… 需要在消费者的配置里加手动

4.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RabbitMQ发布确认

    发布确认的概念在RabbitMQ中,发布确认是指当生产者发送消息到RabbitMQ之后,会等待RabbitMQ发送一个确认消息给生产者,告知消息是否已经成功接收和持久化。...发布确认的工作原理RabbitMQ的发布确认机制基于通道(Channel)级别,通过两个阶段的确认来保证消息的可靠性。发布确认模式设置: 在生产者发送消息之前,首先需要将通道设置为发布确认模式。...一旦通道进入发布确认模式,所有通过该通道发送的消息都会进行确认处理。发布消息和等待确认: 生产者发送消息时,每条消息都会分配一个唯一的、递增的整数ID(DeliveryTag)。...处理确认回调: 为了处理确认回调,需要创建一个ConfirmCallback接口的实现。在实现的handleAck()方法中,可以处理成功接收到确认的消息的逻辑。...然后,在等待确认期间,生产者可以执行其他操作。处理确认回调结果: 当RabbitMQ发送确认消息给生产者时,会调用ConfirmCallback接口的相应方法,告知消息的确认状态。

    1.3K20

    【RabbitMQ】消息确认机制 && 持久化 && 发布确认机制

    设置持久化之后,当 RabbitMQ 的服务器发生意外或关闭之后,进行重启时不需要重新去建立交换机,交换机会自动建立,相当于一直存在。...(因为队列不存在了,那么消息也无处可存了)但是设置了队列的持久化,也只能保证该队列本身的元数据不会因异常情况而丢失,并不能保证内部所存储的消息不会丢失。要确保消息不会丢失,需要设置消息持久化。...MessageDeliveryMode { NON_PERSISTENT, // 非持久化 PERSISTENT; // 持久化}设置了队列以及消息的持久化,当 RabbitMQ 服务重启之后,消息依旧存在...publisher-confirm-type: correlated # 发布确认机制其中发布确认机制这里有三种可选方式:(对应前面学习发布确认机制时候的 无确认、单独确认/批量确认、异步确认...Exchange 到 Queue 的过程,如果一条消息无法被任何队列消费(即没有队列与消息的路由键匹配或队列不存在等),可以选择把消息退回给发送者。

    91510

    RabbitMQ发布确认

    发布确认 1、发布确认原理 2、发布确认策略 2.1 开启发布确认的方法 2.2 单个确认发布 2.3 批量确认发布 2.4 异步确认发布 3、三种发布方式确认速度对比 1、发布确认原理   生产者将信道设置成...2、发布确认策略 2.1 开启发布确认的方法 发布确认默认是没有开启的,如果要开启需要调用方法confirmSelect,每当要想使用发布确认,都需要channel上调用该方法。...  这是一种简单的确认方式,它是一种同步确认发布的方式,也就是发布一个消息之后只有它被确认发布,后续的消息才能继续发布,waitForConfirmsOrDie(long)这个方法只有在消息被确认的时候才返回...,耗时:"+(end-begin)+"ms"); } 发布1000个单独确认消息,耗时:1517ms 2.3 批量确认发布   上面那种方式非常慢,与单个等待确认消息相比,先发布一批消息然后一起确认可以极大地提高吞吐量...,当然这种方式的缺点就是:当发生故障导致发布出现问题时,不知道是哪个消息出现问题了,我们必须将整个批处理保存在内存中,已记录重要的信息而后重新发布消息。

    1.1K40

    收费确认流程

    足球fans(584***82) 16:43:37 BMS是现在的业务管理系统 带工作流引擎的 足球fans(584***82) 16:45:20 项目经理通知企业缴费后,要在系统里发起一个收费确认流程...,首先经过保函经办人复核一下收费是否准确,最后由出纳确认钱是否到账 潘加宇(3504847) 12:24:48 (1)生命线上应该是对象(有冒号的),你这个是类。...潘加宇(3504847) 12:25:42 "项目经理通知企业缴费后,要在系统里发起一个收费确认流程"--钱什么时候进来的? 足球fans(584***82) 22:56:34 ?...UMLChina5(2925524189) 23:03:36 可以 足球fans(584***82) 23:07:30 潘老师,还是接着昨天那个案例,"收费确认流程"走完后,保函经办人需要发起一个"保函发出审核流程...那么这里有一个疑问:保函经办人确认项目是否已收费这个动作,应该按照我上图所示那样作为一个message,还是说应该作为"记录合同附件"这个系统用例中的一个步骤或者前置条件?

    4.1K30

    MQ发布确认

    就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker回传给生产者的确认消息中delivery-tag...confirm模式最大的好处在于他是异步的,一旦发布一条消息,生产者应用程序就可以在等信道返回确认的同时继续发送下一条消息,当消息最终得到确认之后,生产者应用便可以通过回调方法来处理该确认消息,如果RabbitMQ...因为自身内部错误导致消息丢失,就会发送一条nack消息,生产者应用程序同样可以在回调方法中处理该nack消息  发布确认的策略    开启发布确认的方法 发布确认默认是没有开启的,如果要开启需要调用方法...confirmSelect,每当你要想使用发布确认,都需要在channel上调用该方法  单个确认发布 这是一种简单的确认方式,它是一种同步确认发布的方式,也就是发布一个消息之后只有它被确认发布,后续的消息才能继续发布...,不知道是哪个消息出现问题了,我们必须将整个批处理保存在内存中,以记录重要的信息而后重新发布消息。

    1.7K40

    RabbitMq发送方确认

    上一节中我们介绍通过事务机制来保证生产者将消息发送到broker中,但是其问题是每次都需要broker做出确认性的响应,因此对其效率有很大的影响,那么还有其他的方式可以做这件事,那么还效率高呐?...这就是这里要介绍的发送方确认机制。 首先生产者将信道设置为confirm模式,进入确认模式之后。...相比于事务机制的阻塞模式,发送方确认机制最大的好处就是它是异步的。生产者发送一条消息,生产者就可以在等待信道返回确认的同时继续发送下一条消息。...当消息最终得到确认之后,生产者应用程序便可以通过回调方法来处理该确认消息。如果broker因为自身导致消息丢失,那么会发送一条basic.nack。生产者据此进行相关的处理。...大概得过程如下: 生产者确认机制我们之前的实例一直在用。这块的示例就是为了体现一下springboot下的相关配置。

    82210

    RabbitMQ 消息确认详解

    01 RabbitMQ的消息确认流程 从图中可以看出: 消息确认机制分为生产者确认和消费者确认 ConfirmCallback 生产者 ReturnCallback 生产者 ACK 消费者 02 生产者确认...消息到达RabbitMQ的Exchange:Exchange向生产者发送Confirm确认。...只有失败才会返回 03 消费者确认 消费者收到消息后需要对 RabbitMQ Server 进行消息 ACK 确认,RabbitMQ 根据确认信息决定是删除队列中的该信息还是重新发送 04 代码实现 4.1...生产者确认 重点在于生产者重写下面两个方法 rabbitMQTemplate.setConfirmCallback rabbitMQTemplate.setReturnCallback 1.开启生产者消息确认...else System.out.println("消息发送失败"); } }); // 模拟生产者发送信息 // 不存在的交换机

    1.7K00

    利用htaccess把域名绑定到子目录

    把签到助手的介绍页面建好之后,我把网页都放在了www.izgq.net的sign目录下,但是这样的网址 http://www.izgq.net/sign 看起来好难看,所以我便打算看看能不能把域名绑到子目录上...翻了一遍服务器的控制面板都没发现子目录绑定这种东西。。...百度了n久,终于找到利用.htaccess文件把域名绑定子目录的方法,这里是把qiandao.izgq.net绑定到sign目录下,其他情况的把域名和目录名换掉就好了 .htaccess文件是Apache...服务器的配置文件,它可以针对每个目录改变配置,也就是说在一个文件夹里面放了.htaccess的话,它和它的所有子目录都会按这个文件里面的内容来配置,其他的不会影响,可能有些主机不支持.htaccess,...不过我这个支持哈哈哈哈 那怎么把域名绑到子目录呢。

    4.7K10

    利用.htaccess绑定子域名到子目录

    利用.htaccess绑定域名到子目录,前提你的空间服务器必须支持apache的rewrite功能,只有这样才能使用.htaccess。如果你的空间是Linux服务器 一般默认都开启了的。...即可以实现绑定域名到子目录、一个空间多个站点。 下面是以 link.52ecy.cn 绑定到子目录link为例的.htaccess代码.... RewriteEngine On RewriteBase / # 绑定link.52ecy.cn 到子目录link RewriteCond...htaccess代码如下: 下面是以 music.xmgho.com 绑定到子目录music为例的.htaccess代码. 即可以实现绑定域名到子目录、一个空间多个站点。...即可以实现绑定域名到子目录、一个空间多个站点。即可以实现绑定域名到子目录、一个空间多个站点。即可以实现绑定域名到子目录、一个空间多个站点。

    5.3K40

    RabbitMQ 发布确认高级

    # RabbitMQ 发布确认高级 发布确认SpringBoot版本 介绍 实战 添加配置类 消息生产者 消息消费者 消息生产者发布消息后的回调接口 回退消息 介绍 实战 修改配置文件 修改回调接口...# 发布确认SpringBoot版本 简单的发布确认机制在应答与签收已经介绍,本内容将介绍整合了 SpringBoot 的发布确认机制。...# 介绍 首先发布消息后进行备份在缓存里,如果消息成功发布确认到交换机,则从缓存里删除该消息,如果没有成功发布,则设置一个定时任务,重新从缓存里获取消息发布到交换机,直到成功发布到交换机。...,交换机接收到消息后,会直接给消息生产者发送确认消息,如果发现该消息不可路由,那么消息会被直接丢弃,此时生产者是不知道消息被丢弃这个事件的。...在 RabbitMQ 中,有一种备份交换机的机制存在,可以很好的应对这个问题。 什么是备份交换机呢?

    1.2K30
    领券