您现在的位置是:首页» windows系统» rabbitmq常见面试题,rabbitmq怎么处理消息挤压

rabbitmq常见面试题,rabbitmq怎么处理消息挤压

2024-07-13 09:36:57
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。上个博客报导了RabitMQ服务的设置和简便介绍,如果要将兔子MQ用于生产,就必须评估和处理许多困难。目录消息转换器制作人如

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

上个博客报导了RabitMQ服务的设置和简便介绍,如果要将兔子MQ用于生产,就必须评估和处理许多困难。

目录

消息转换器

制作人如何确保信息不被误解?

客户如何保护自己免受数据丢失的影响?

消息预取

死信交换机

消息转换器

原始的 RabibitMQ 只能传输字节阵列, 但是当与 SpringBoot 结合时, Spring 允许开发者传递对象, 因为 Spring 在发送和接收信件方面做了一些工作 。

标准电文转换器是:SimpleMessageConverter转换的一般理由如下:

如果请求的内容类型是text点击头部然后将信件转换为字符串。确定是否在切换前提供字符集,如果不是,则确定默认字符集。UTF-8转换。 如果内容为内容, 类型等于application/x-java-serialized-object信息将按序发送到爪哇。 如果下列要求得不到满足,则不会转换,传输将以同样方式继续进行。

自定义消息转换器

如有必要,您也可以自行选择执行信件转换器。创建类实现MessageConverter接口,生产者实现toMessage方法,消费者实现fromMessage方法。

模板配置配置自定义转换器

制作人如何确保信息不被误解?

这一信息被有效地分为两类:

经纪人已经收到消息了 信件已成功转发到队列 。

一般而言,从操作的角度来看,信息只有在发送到Quue才成功。

RabbitMQ在这两起案件中两次返回:Confilm回击和回击。

ConfirmCallback

确认回召是担心“如果消息到达Broker或未到达”,

在向Broker发送信息后,RabbitMQ在答复时通知生产商已经收到这一信息。

代码实现

开启发送者确认

无法将信件附加到 mh 文件夹:%s:%s

设置发送确认回声的模板设置

当用户注册成功时, 接口会发送邮件操作代码 。

请求提出,控制表如下图所示:

dtoa到达了Broker,但很难确定它是否被转送到Quue,这就需要使用回击。

ReturnCallback

ReferCallback 关注信件是否被成功传送到队列, 通常与 ConfilmCallback 一同使用 。

如果经纪人已经收到消息了但是没有被路由到Queue,则会触发ReturnCallback。例如:Exchange没有绑定Queue。反之,回响回响, 将不会有触发器。

mandatory

RabbitMQ像路由器一样接收信息,并根据需要开展各种活动,但默认情况下会作假。

如果需要伪造,兔子MQ如果无法转发数据,它只会忽略数据。如果信件无法追踪, RabibitMQ 将使用 Basic. return 并请求将数据还给制片人。

代码实现

开启发送者确认

编写消息失败回调类

启动所需的模式并配置回声示例 。

发送信件后, 错误的根键被设置, 控制表看起来是这样 :

设置适当的根基密钥,不引用回调 。

备用交换机

您可以在声明开关时指定属性 :alternate-exchange安装备用开关 。当无法将信件发送到 Quue 时,RabbitMQ 将其发送到替代开关路径,该通称“FANOUT类型保证信件被发送到 Quueu 。

必须指出,如果信息在主开关中没有领先,只要备份开关中的领先成功,Retrn Callback的返回就不会触发。如果主开关或备用开关都无法成功,宣布备用开关只能导致回响回响回响。

总结

ConfirmCallback针对消息没有到达Broker的回调处理,ReturnCallback针对经纪人已经收到消息了但是没路由到Queue的回调处理。通常使用两者并用,以确保所有电文均无损失地传送。

RabitMQ也支持这项服务,并且可以确保信息不会丢失,但是服务开业后的表现严重退化,不建议使用。

客户如何保护自己免受数据丢失的影响?

为了保证信息不会丢失,消费者除了确保制造商100%传达信息之外,还必须确保信息不会丢失。

RabitMQ 校验模式的讯息 :

AcknowledgeMode.NONE AcknowledgeMode.MANUAL AcknowledgeMode.AUTO

默认是自动确认,即当消费者删除信件时, 队列会删除信件, 不论消费成功与否 。

如果数据需求不大,例如日志记录,即使缺少一些日志,也可以使用自动确认来保证最佳性能。

但是,如果数据要求十分严格,则必须使用人工确认。

消息手动确认

当消费者以手动确认模式撤回电文时, 队列不会删除电文, 而是将电文状态更改为Unacked除非能证明客户能够获得消费知识,否则他们可以成功或失败。

信件成功消耗后, 通知 Rabibit MQ, 从队列中删除信件 。

当消费失败时,有两种选择:通知RabbitMQ将信息重新收录并分发给其他消费者,或认为信息是数据浪费并销毁数据。

不论摄入是否成功,或是否成功,都必须加以确认;否则,信息仍将未经证实。Unacked州政府, 堆积在等待。

信息在客户收到后是否会丢失?

否,即使消费者收到电文, 队列也不会以手动确认模式删除电文 。Unacked待确认。Labbit MQ通过将信息状态改变为状态来确认这一点。Ready分发给其他消费者。

虽然没有信息损失,但还有一个问题:重复新闻消费。

例如,如果消费者获得的信息已成功消费,但服务在新闻确认前出乎意料地失败,RabitMQ会认为该新闻没有得到适当消费,并将传播给其他消费者,结果新闻被重新利用,由“消息等”处理,以后再提供。

手动激活信件或使用 yml 激活 。

消费者:信息确认和返回

消息预取

在讨论预先提供信息之前,应提及传播拉比比MQ信息的过程。

默认情况下,LabitMQ将信息全天24小时传送给消费者,即使消费者无法吸收。这将确保LabitMQ不会因为信息积累而对业绩产生不利影响,但不会特别方便用户。

例如,在Quueu有100条留言。两个客户在同一时间开始。RabbitMQ会立即向每个客户发送50条信息。假设客户A很强大一个S可以吃掉多达50条信息。而消费者B性能弱,完全消费需要10S消费者A这次是免费的。消费者B会非常忙A的能力没有得到适当的利用。

预发资料的配置可以反映消费者的现实情况,当预发资料打开时,兔子Q不会直接发送所有资料,而是根据规定的预先要求的数额,只有在消费者经过充分处理后才进行下一轮分发。

例如,在Quue的100条信息中,消费者消费的一条信息需要1S,一条信息先发制人,RabitMQ每秒发出一条信息,如下图所示:

信息打开后,也可以分批核实,这样可以提高性能。

设置消息预取的数量

消息批量确认

预先篡改的信息数量需要适当的价值,对于性能不佳来说,这种价值太少,不能说明性能不佳,但对于数据可靠性来说则太高,或者对于性能高但数据可靠性低来说太大。

消息重复消费

当信息打开时,可能会出现“外交消费”问题。收集了100条信息,99条成功被吃掉,该系统在消费时受到惊吓,LabitMQ将再向其他消费者发送100条信息。

兔子Q并不提供公司必须自行解决的解决办法,共同的解决办法包括:

包含字段的数据库表格将消费指标分开。 Rediis用于保存成功的消费标签。

死信交换机

“ 死亡的换文” 可以分配到队列 。dead-letter-exchange如果新闻是这样的,拉比比特MQ 将再次将它传送到死讯 交换改道。

对不起,我听不懂你在说什么 消息过期(TTL) 超过最大队列限制的(x-最大长度)信件被删除。 超过最大队列限制,则删除信件总大小(x-max-max-长字节) 。

如果数据处于这种状态,如果RabitMQ预计不会销毁该电文,则可以通过建立已绝电的换文来保存该电文。

当电文无法被消费者正确吸收时,将使用一纸空文交换方式将电文发送到另一队列,以便重新测试或人工干预。

宣布队列, 建立死字母交换, 并发送信件到线条交换处, 以便在队列过期时改道到队列 。

如预期的那样,该信息被退回。

避免死循环

兔兔的使用需要额外的护理以避免死亡循环,而且新闻永远无法被完全消耗,然而兔子Q继续向消费者发送信息,造成死亡循环,例如:

当只有一个消费者时,新闻就恢复,新闻就恢复到Quue。 原封不动字母的开关是Quue的

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com