RabbitMQ常见问题解决方案
来源:http://www.tudoupe.com时间:2022-05-04
上个博客报导了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的
上一篇:git常见问题
相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
