RabbitMQ 消息应答

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

每日一句

物是人非事事休,欲语泪先流。

概述

为了保证消息在发送过程中不丢失,RabbitMQ引入了消息应答机制,

消费者在接收到消息并且处理该消息后,告诉RabbitMQ它已经处理了,RabbitMQ可以把消息删除了。

自动应答

消息发送后立即被认为已经传送成功,这种模式需要在高吞吐量和数据传输安全性方面做权衡。

因为这种模式有两种情况会出问题:

1。如果消息在接收到之前,消费者那边出现连接或者channel关闭,那么消息就丢失了。

2。消费者这边由于接收太多还来不及处理的消息,导致这些消息的积压,最终使得内存耗尽,最终这些消费者线程会被操作系统杀死。

所以这种模式仅适用于在消费者可以高效并以某种速率能够处理这些消息的情况下使用。

消息应答的方法

A.Channel.basicAck(用于肯定确认) RabbitMQ 已知道该消息并且成功的处理消息,可以将其丢弃了

B.Channel.basicNack(用于否定确认)

C.Channel.basicReject(用于否定确认) 与 Channel.basicNack 相比少一个参数,不处理该消息了直接拒绝,可以将其丢弃了

Multiple 的解释

手动应答的好处是可以批量应答并且减少网络拥堵

RabbitMQ 消息应答

multiple 的 true 和 false 代表不同意思

true 代表批量应答 channel 上未应答的消息

比如说 channel 上有传送 tag 的消息 5,6,7,8 当前 tag 是8 那么此时5-8 的这些还未应答的消息都会被确认收到消息应答

false 同上面相比只会应答 tag=8 的消息 5,6,7 这三个消息依然不会被确认收到消息应答

消息自动重新入队

如果消费者由于某些原因失去连接(其通道已关闭,连接已关闭或 TCP 连接丢失),导致消息未发送 ACK 确认,RabbitMQ 将了解到消息未完全处理,并将对其重新排队。如果此时其他消费者可以处理,它将很快将其重新分发给另一个消费者。这样,即使某个消费者偶尔死亡,也可以确保不会丢失任何消息。

消息手动应答代码

RabbitMQ 消息应答

面试题

线程池工作原理?

JVM先根据用户给定的参数创建一定数量的可运行的线程任务,并将其放入队列中,在线程创建后启动这些任务。

1。通过execute 方法提交任务时,当线程池中的线程小于corePoolsize时,新提交的任务将通过创建一个新线程来执行,即使此时线程池中存在空闲线程。

2。通过execute方法提交任务时,当线程池中线程数量达到corePoolSize时,新提交的任务将被放入workQueue中,等待线程池中线程调度执行。

  1. 通过execute方法提交任务时,当workQueue已存满,且maximumPoolSize大于corePoolSize时,新提交的任务将通过创建新线程执行。

4。通过execute方法提交任务,当线程池中线程数达到maxmumPoolSize,并且workQueue也存满时,新提交的任务由RejectedExecutionHandler执行拒绝操作。

5。当线程池中线程数超过corePoolSize,并且未配置allowCoreThreadTimeOut=true,空闲时间超过keepAliveTime的线程会被销毁,保持线程池中线程数为corePoolSize。

6。当设置allowCoreThreadTimeOut=true时,任何空闲时间超过keepAliveTime的线程都会被销毁。

线程池(Thread Pool)是一种基于池化思想管理线程的工具,线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。

线程池维护多个线程,等待监督管理者分配可并发执行的任务。

这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。

线程池解决的核心问题就是资源管理问题。

【HashMap】HashMap中,当两个对象的hashcode相同会发生什么?如果两个键的hashcode相同,你如何获取值对象?

因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。

HashMap中,如果两个键的hashcode相同,你如何获取值对象?

当我们调用get()方法,HashMap会使用键对象的hashcode找到bucket位置,然后获取值对象。 找到bucket位置之后,会调用keys.equals()方法去找到链表中正确的节点,最终找到要找的值对象

【GC算法】为什么 JAVA 新生代使用复制算法、老年代使用标记清除算法比较好?三种算法对比?

  • 新生代更新频繁,绝大部分都是垃圾对象,垃圾回收之后,只有极小的可用对象,采用复制算法,将这小部分的对象复制到S区,成本是比较小的。

  • 老年代中的对象很多经过新生代之后,都是证明不好回收的对象,采用复制算法,那么需要复制对象的太多了,成本太高了。采用标记清除算法只需要删除标记对象就可以了,这样的成本是最低的。

  • CMS收集器关注延迟问题,有低延迟的特性,基于标记清除算法。因为该算法不需要移动对象,所以停顿时间短,但正是不需要移动对象,所以会有内存碎片化的问题

  • Parallel Old收集器,关注吞吐量,是基于标记整理算法,牺牲了一定的性能,但是对内存对象进行了一个压缩操作,所以吞吐量会大一点。

你好,我是yltrcc,日常分享技术点滴,欢迎关注我:ylcoder文章来源地址https://www.toymoban.com/news/detail-709871.html

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

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

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

相关文章

  • RabbitMQ 消息应答与发布

    目录 一、消息应答 1、自动应答(默认) 2、手动消息应答的方法  ​编辑 3、消息重新入队 4、手动应答案列与效果演示 二、RabbitMQ持久化 1、队列持久化 2、消息持久化 三、不公平分发(能者多劳,弱者少劳) 1、介绍 2、效果演示 四、预取值分发 1、介绍 五、发布确认 六

    2024年02月06日
    浏览(37)
  • RabbitMQ基于Java实现消息应答

    概念 RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑RabbitMQ是一个快递站, 一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不

    2024年04月10日
    浏览(39)
  • 消息队列-RabbitMQ:workQueues—工作队列、消息应答机制、RabbitMQ 持久化、不公平分发(能者多劳)

    Work Queues— 工作队列 (又称任务队列) 的主要思想是避免立即执行资源密集型任务,而不得不等待它完成 。 我们把任务封装为消息并将其发送到队列,在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务 。 轮训分发消

    2024年02月21日
    浏览(56)
  • RabbitMQ (HelloWord 消息应答 持久化 不公平分发 预取值)

    在下图中,“P”是我们的生产者,“C”是我们的消费者。中间的框是一个队列-RabbitMO.代表使用者保留的消息缓冲区 第一步:导入依赖 第二步:创建生产者 第三步:创建消费者 因为你为了确保同一条消息被其中一个工作线程接收到了之后,其它工作就不能消费的到了 三者

    2023年04月14日
    浏览(43)
  • rabbitMQ手动应答与自动应答

    手动应答模式(manual) 解释:         手动应答:既是当消费者消费了队列中消息时需要给队列一个应答,告诉队列这条消息我已经消费了,可以删除了;         若是不应答,即使消费了 队列没收到消费成功的提示 所有消息会一直在队列中;      注意 注意 注意 :重要的事情说三

    2024年02月10日
    浏览(35)
  • RabbitMQ中的手动应答和自动应答

    当使用RabbitMQ来处理消息时,消息确认是一个重要的概念。RabbitMQ提供了两种不同的消息确认方式:自动应答(Automatic Acknowledgment)和手动应答(Manual Acknowledgment)。这两种方式适用于不同的应用场景,本文将通过Java代码示例来演示它们的区别以及如何在实际应用中使用它们

    2024年02月06日
    浏览(35)
  • 小度wifi隔空传物是什么意思?怎么用?

    小度WiFi功能非常的强大,提供很多的功能提供给我们使用,比如,空中传物在无需要数据情况,对电脑文件通过手机扫描后,手机就可以进行下载电脑上文件,如果通过设置之后,图片的信息展示在到手机上,是不是很强大的空中传物,那么小度wifi如何隔空传物的呢? 小度

    2024年02月08日
    浏览(40)
  • 4.是人就能学会的Spring源码教程-IOC容器创建Bean对象

    我们要关注一个接口 BeanFactory ,它是Spring IOC容器的根接口,也是容器的入口。 类的描述中已经清楚的说明了: 我们来看一下这个接口里面的方法。 我们可以看到有各种各样的 getBean 方法,让我们可以从容器中获取到各种各样的Bean对象。 BeanFactory 有一个实现类 DefaultListab

    2024年02月05日
    浏览(40)
  • RabbitMQ保证消息的可靠投递,Java实现RabbitMQ消息的可靠投递,Springboot实现RabbitMQ消息的可靠投递

    我们先看一串代码,并思考一下为什么要先入库然后发MQ: 如果先发MQ的话,如果入库失败,就会导致MQ消息无法回滚了。今天我们就好好聊一聊RabbitMQ消息可靠投递的问题。 ① 消息从生产者发送到Broker 生产者把消息发送到Broker之后,如何知道自己的消息有没有被Broker成功接

    2024年02月11日
    浏览(55)
  • RabbitMQ实现延迟消息,RabbitMQ使用死信队列实现延迟消息,RabbitMQ延时队列插件

    假设有一个业务场景:超过30分钟未付款的订单自动关闭,这个功能应该怎么实现? RabbitMQ使用死信队列,可以实现消息的延迟接收。 队列有一个消息过期属性。就像丰巢超过24小时就收费一样,通过设置这个属性,超过了指定事件的消息将会被丢弃。 这个属性交:x-message

    2024年02月13日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包