当前位置:   article > 正文

rabbitmq unacked消息如何处理_RabbitMQ 如何保证消息的可靠性

amqp如何消费unack的消息

一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失。

一 消息生产者没有把消息成功发送到MQ

1.1 事务机制

AMQP协议提供了事务机制,在投递消息时开启事务支持,如果消息投递失败,则回滚事务。

自定义事务管理器

  1. @Configurationpublic class RabbitTranscation {
  2.     @Bean    public RabbitTransactionManager rabbitTransactionManager(ConnectionFactory connectionFactory){
  3.         return new RabbitTransactionManager(connectionFactory);    }    @Bean    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
  4.         return new RabbitTemplate(connectionFactory);    }}

修改yml

spring:  rabbitmq:    # 消息在未被队列收到的情况下返回    publisher-returnstrue

开启事务支持

rabbitTemplate.setChannelTransacted(true);

消息未接收时调用ReturnCallback

rabbitTemplate.setMandatory(true);

生产者投递消息

  1. @Servicepublic class ProviderTranscation implements RabbitTemplate.ReturnCallback {
  2.     @Autowired    RabbitTemplate rabbitTemplate;    @PostConstruct    public void init(){
  3.         // 设置channel开启事务        rabbitTemplate.setChannelTransacted(true);        rabbitTem
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/805540
推荐阅读
相关标签
  

闽ICP备14008679号