猪八戒做网站排名网页设计制作教程
news/
2025/9/22 18:21:46/
文章来源:
猪八戒做网站排名,网页设计制作教程,wordpress特色主题,牡丹江信息网手机版招聘消息队列在使用过程中会出现很多问题
首先就是消息的可靠性#xff0c;也就是消息从发送到消费者接收#xff0c;消息在这中间过程中可能会丢失
生产者到交换机的过程、交换机到队列的过程、消息队列中、消费者接收消息的过程中#xff0c;这些过程中消息都可能会丢失。
…消息队列在使用过程中会出现很多问题
首先就是消息的可靠性也就是消息从发送到消费者接收消息在这中间过程中可能会丢失
生产者到交换机的过程、交换机到队列的过程、消息队列中、消费者接收消息的过程中这些过程中消息都可能会丢失。
这对上述过程RabbitMQ分别对应的解决方案是生产者确认机制、持久化机制、消费者确认机制、消费者失败重试机制。
生产者确认机制就是保证消息在生产者到交换机的过程、交换机到队列的过程不会丢失的机制。这种机制给每一个消息指定了唯一的ID消息从生产者到交换机、从交换机到队列中的阶段都会返回一个结果消息从生产者到交换机会通过返回一个布尔值来反馈消息是否送到了交换机即发送者确认publisher-confirm。如果消息投递到了交换机但是没有到队列就会返回ACK及路由失败原因即发送者回执publisher-return。
持久化机制就是保证消息在消息队列中不会丢失的机制。比如消息发送到RabbitMQ中突然发生宕机将会导致消息丢失。消息持久化机制包括交换机持久化、队列持久化、消息持久化。默认情况下由SpringAMQP声明的交换机和队列都是持久化的。可以在RabbitMQ控制台上看到叫交换机和队列的features字段上标示D。利用SpringAMQP发送消息时可以设置消息的属性MessageProperties指定为delivery-mode。 消费者消息确认机制在此机制下RabitMQ会根据消费者的回执来确认消费者是否成功处理消息然后在确定是否删除消息。SpringAMQP确认模式默认是auto由spring检测listenner代码是否出现异常没异常返回ack有异常返回nack。当然还有manual手动ack模式和none无ack模式。unacked会在控制台queues中的messas中显示并回复到Ready状态不会被RabbitMQ删除、并且会重新投递。但是消息不断的重入队发送消息、出现异常、在重入队出现了死循环这是就要依靠消费者失败重试机制了。
消费者失败重试机制主要实现靠两方面
1.将重入队利用Spring的retry机制改为本地重试可以通过修改消费者服务模块的application.ym文件。
spring:rabbitmq:listener:simple:retry:enabled: true # 开启消费者失败重试initial-interval: 1000 # 初始的失败等待时长为1000毫秒1秒multiplier: 2 # 每次重试尝试时间间隔增加因子max-attempts: 3 # 最大重试次数达到最大重试次数后消息默认会被丢弃stateless: true # true无状态false有状态。如果业务中包含事务这里改为false
上述配置完成触发本地重试在重试3次后SpringAMQP会抛出异常AmqpRejectAndDontRequeueException并且控制台上消息被删除了意味着SpringAMQP返回的是ackmq删除消息了。
2.指定消息重试失败的失败策略默认的是直接丢弃消息也可以设置将其失败后重新入队不建议没意义推荐的是将失败的消息投递到指定的队列这个队列专门存放异常消息后续方便人工处理。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909954.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!