RabbitMQ消息应答概念

这篇具有很好参考价值的文章主要介绍了RabbitMQ消息应答概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习笔记

生产者发送消息到队列中,消费者需要完成这个任务,并且处理信息,那么队列中的信息就会被删除掉;
那么如果消费者处理这个任务所需要的时间很长,队列中的信息已经被删除了,而消费者线程挂掉了;
那么就会造成这一条信息的丢失,这是不可取的。
所以需要一种消息应答机制来处理这一个问题。简而言之,就是消费者处理这条信息完成之后;
告诉mq这条信息已经处理完毕,然后mq才把这一条信息从队列中删除,这样就可以避免信息丢失的问题。

自动应答:当消费者接收到信息的时候,自动告诉mq处理完毕信息,及消息发送后立即被认为已经传送成功,但是实际上还没有处理完毕。
这种模式需要在高吞吐量和数据传输安全性方面做权衡。因为这种模式如果消息在接受之前,消费者那边出现连续或者channel关闭,那么消息就丢失了,
当然另一方面消费者可以传递过载的信息,没有对传输的消息数量进行限制。当然这样有可能使得消费者这边由于接收太多的消息而来不及处理,
导致这些消息的积压,最终导致内存耗尽,消费者线程被操作系统杀死。所以,
这种自动应答模式适用的前提是,有一个良好的环境,不能出错、消费者处理信息的速率相当高。

手动应答:手动应答的好处是可以批量应答并且减少网络拥堵。分为三个方法
A.Channel.basicAck(用于肯定确认)
    MQ已经知道该消息被成功处理了,可以将其丢失了
B.Channel.basicNack(用于否定确认)
C.Channel.basicReject(用于否定确认)
    比Channel.basicNack少一个参数
    不处理该消息了直接拒绝,可以将其丢弃了

channel.basicAck(deliveryTag,true) true就代表multiple

multiple的true和false代表不同意思
    true代表批量应答channel上未应答的消息
        比如说channel上有传递tag的消息5,6,7,8当前tag是8 那么此时
        5-8的这些还未应答的消息都会被确认收到消息应答
    false同上面相比
        只会应答tag=8的消息5,6,7这三个消息依然不会被确认收到信息应答文章来源地址https://www.toymoban.com/news/detail-498492.html

到了这里,关于RabbitMQ消息应答概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ消息可靠性(一)-- 生产者消息确认

    目录 前言 一、消息确认流程图 二、生产者消息确认 1、publisher-confirm(发送者确认) 2、publisher-return(发送者回执) 三、代码实现 1、修改application.yml 配置 2、ConfirmCallback函数和ReturnCallback函数 在项目中,引入了RabbitMQ这一中间件,必然也需要在业务中增加对数据安全性的一

    2024年02月04日
    浏览(73)
  • RabbitMQ 生产者-消息丢失 之 场景分析

      生产者发送消息的流程如下:首先生产者和RabbitMQ服务器建立连接,然后创建信道,通过信道发送消息给RabbitMQ服务器,RabbitMQ服务器接收到消息后交由交换机进行消息存储,交换机根据不同策略将消息路由到指定队列中。在此过程中,可能会存在以下消息丢失的场景:

    2024年02月14日
    浏览(44)
  • Spring整合RabbitMQ-配制文件方式-1-消息生产者

    Spring-amqp是对AMQP的一些概念的一些抽象,Spring-rabbit是对RabbitMQ操作的封装实现。 主要有几个核心类 RabbitAdmin 、 RabbitTemplate 、 SimpleMessageListenerContainer 等 RabbitAdmin 类完成对Exchange、Queue、Binding的操作,在容器中管理 了 RabbitAdmin 类的时候,可以对Exchange、Queue、Binding进行自动声

    2024年02月09日
    浏览(42)
  • 【RabbitMQ】RabbitMQ 消息的可靠性 —— 生产者和消费者消息的确认,消息的持久化以及消费失败的重试机制

    在现代分布式应用程序中,消息队列扮演了至关重要的角色,允许系统中的各个组件之间进行异步通信。这种通信模式提供了高度的灵活性和可伸缩性,但也引入了一系列的挑战,其中最重要的之一是消息的可靠性。 首先让我们来了解一下,在消息队列中,消息从生产者发送

    2024年02月05日
    浏览(53)
  • RabbitMQ初级篇:生产者与消费者关系、消息确认机制(ACK)、交换器与队列进行消息路由和存储

    在RabbitMQ中,生产者(Producer) 负责发送消息 ,通常是应用程序向RabbitMQ服务器发送具有特定路由键的消息;消费者(Consumer)则 负责处理接收到的这些消息 。在RabbitMQ中,生产者和消费者之间使用 交换器(Exchange)和队列(Queue)进行消息路由和存储 。生产者将消息发送到

    2024年02月01日
    浏览(43)
  • 如何在rabbitmq中实现一个生产者,多个消费者,多个消费者都能收到同一条消息

    场景:用户登录,邀请其它用户进行视频会议,收到邀请的用户进入会议 rabbitmq实现思路: 选型:发布订阅模式(Publish/Subscribe) 一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,

    2023年04月25日
    浏览(54)
  • 消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

    目前主流的消息队列技术(MQ技术)分为RabbitMQ和Kafka,其中深蓝色为只要是MQ,一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。 MQ主要提供的功能为:异步 解耦 削峰 。 展开来讲就是 异步发送(验证码、短信、邮件…) MYSQL和Redi

    2024年01月24日
    浏览(61)
  • SparkStreaming学习——读取socket的数据和kafka生产者的消息

    目录 一、Spark Streaming概述 二、添加依赖 三、配置log4j 1.依赖下载好后打开IDEA最左侧的外部库 2.找到spark-core 3.找到apache.spark目录 4.找到log4j-defaults.properties文件 5.将该文件放在资源目录下,并修改文件名 6.修改log4j.properties第19行的内容 四、Spark Streaming读取Socket数据流 1.代码编

    2023年04月27日
    浏览(40)
  • RocketMQ学习笔记:生产者Producer

    根据上文:RocketMQ学习笔记:消息Message - 掘金 (juejin.cn),我们定位到 Producer 中的这一行代码: java 复制代码 DefaultMQProducer producer = new DefaultMQProducer(\\\"ProducerGroupName\\\"); producer.setNamesrvAddr(\\\"127.0.0.1:9876\\\"); producer.start(); 通过 new DefaultMQProducer(\\\"ProducerGroupName\\\") 实例化一个生产者对象。这

    2024年02月04日
    浏览(44)
  • RabbitMQ系列(7)--RabbitMQ消息应答及消息未应答后重新入队

    概念:消费者消费完一条消息可能需要等待一段时间,但如果这段时间内消费者在未完成消费信息的情况下时就挂掉了,这时候会怎么样?RabbitMQ一旦向消费者传递一条消息,该消息就会被标记为删除,这种情况下消费者挂掉了正在处理的消息就会丢失,为了保证消息在发送

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包