项目实战之RabbitMQ重试机制进行消息补偿通知

这篇具有很好参考价值的文章主要介绍了项目实战之RabbitMQ重试机制进行消息补偿通知。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。


项目实战之RabbitMQ重试机制进行消息补偿通知,项目实战经验,rabbitmq,分布式


🌟架构图

项目实战之RabbitMQ重试机制进行消息补偿通知,项目实战经验,rabbitmq,分布式


🌟application.properties

##----------rabbit配置--------------
spring.rabbitmq.host=49.233.48.98
spring.rabbitmq.port=5672
#需要手工创建虚拟主机
spring.rabbitmq.virtual-host=dev
spring.rabbitmq.username=admin
spring.rabbitmq.password=password
#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
spring.rabbitmq.listener.simple.acknowledge-mode=auto
#开启重试,消费者代码不能try catch捕获异常,要抛出异常
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=4
# 重试消息的时间间隔,5秒
spring.rabbitmq.listener.simple.retry.initial-interval=5000

🌟异常MQ配置

@Configuration
@Slf4j
public class ErrorRabbitMQConfig {
    /**
     * 异常交换机
     */
    private String errorExchange="error.exchange";
    /**
     * 异常队列
     */
    private String errorQueue="error.queue";

    private String errorRoutingKey="error.routing.key";

    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**
     * 创建异常交换机
     * @return
     */
    @Bean
    public TopicExchange errorTopicExchange(){
        return new TopicExchange(errorExchange,true,false);
    }

    /**
     * 创建异常队列
     * @return
     */
    @Bean
    public Queue errorQueue(){
        return new Queue(errorQueue,true);
    }

    /**
     * 建立绑定关系
     * @return
     */
    @Bean
    public Binding bindingErrorQueueAndExchange(){
        return BindingBuilder.bind(errorQueue()).to(errorExchange()).with(errorRoutingKey);
    }
    /**
    *消息重新发布到异常MQ
    */
    @Bean
    public MessageRecoverer messageRecoverer(){
        return new RepublishMessageRecoverer(rabbitTemplate,errorExchange,errorRoutingKey);
    }
}

🌟异常MQ消费者

@Component
@Slf4j
@RabbitListener(queuesToDeclare = { @Queue("error.queue") })
public class ErrorMQListener {
    @RabbitHandler
    private void errorMessageHandler(EventMessage eventMessage, Message message, Channel channel) throws IOException {
        log.info("监听到消息:{}",message);
        //进行消息消费
        //发送邮箱通知、告警服务
    }
}

🌟注意

  1. 业务MQ消费者代码逻辑记得往外抛异常,进行try-catch了也要往外抛。
  2. 消息消费重试,达到重试次数进入到异常交换机、队列。消息确认方式需要改为自动ack。

🌟写在最后

有关于项目实战之RabbitMQ重试机制进行消息补偿通知到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


项目实战之RabbitMQ重试机制进行消息补偿通知,项目实战经验,rabbitmq,分布式文章来源地址https://www.toymoban.com/news/detail-752045.html

到了这里,关于项目实战之RabbitMQ重试机制进行消息补偿通知的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用rabbitmq进行支付之后的消息通知

    订单服务完成支付后将支付结果发给每一个与订单服务对接的微服务,订单服务将消息发给交换机,由交换机广播消息,每个订阅消息的微服务都可以接收到支付结果. 微服务收到支付结果根据订单的类型去更新自己的业务数据。 使用消息队列进行异步通知需要保证消息的可

    2024年02月10日
    浏览(47)
  • rabbitmq 重试机制

    RabbitMQ是一个开源的消息中间件,它提供了可靠的消息传递机制。当消息发送到RabbitMQ时,可能会出现一些问题,例如网络故障、消费者不可用等,导致消息无法成功发送或消费。为了解决这些问题,RabbitMQ提供了重试机制。 重试机制是指在消息发送或消费过程中,当出现错误

    2024年02月03日
    浏览(38)
  • RabbitMQ--重试机制

    原文网址:RabbitMQ--重试机制_IT利刃出鞘的博客-CSDN博客 说明         本文介绍RabbitMQ的重试机制。 问题描述         消费者默认是自动提交,如果消费时出现了RuntimException,会导致消息直接重新入队,再次投递(进入队首),进入死循环,继而导致后面的消息被阻塞。

    2024年02月02日
    浏览(54)
  • RabbitMQ异步与重试机制

            先来回顾一下前文,我们先基于Java原生语言,利用多线程和锁实现了串行/并行任务(Java串行/并行任务实现);之后利用SpringBoot为我们封装好的功能,尝试用SpringBoot自带的API实现了异步调用,并在此基础上,统一管理了多线程的事务(SpringBoot异步任务及并行事务实

    2024年02月07日
    浏览(38)
  • springboot:整合rabbitmq之重试机制

    当我们消息消费失败的时候,可以进行重试, 什么情况下会重发消息 1、网络抖动 2、程序抛出异常没有try-catch RabbitMQ自动补偿机制触发:(多用于调用第三方接口) 1.当我们的消费者在处理我们的消息的时候,程序抛出异常情况下(默认无限次数重试),如果这里的异常try-catch后自己

    2024年02月09日
    浏览(36)
  • RabbitMQ初级篇:生产者与消费者关系、消息确认机制(ACK)、交换器与队列进行消息路由和存储

    在RabbitMQ中,生产者(Producer) 负责发送消息 ,通常是应用程序向RabbitMQ服务器发送具有特定路由键的消息;消费者(Consumer)则 负责处理接收到的这些消息 。在RabbitMQ中,生产者和消费者之间使用 交换器(Exchange)和队列(Queue)进行消息路由和存储 。生产者将消息发送到

    2024年02月01日
    浏览(43)
  • 高效处理消息:使用Spring Boot实现消息重试机制

    当涉及到消息发送和接收的可靠性,Spring Boot提供了一些机制来确保消息的可靠传递。其中包括消息确认机制和重试机制。下面是一个示例代码,演示如何在Spring Boot中实现可靠的消息发送和接收。 首先,我们需要配置RabbitMQ的连接信息和相关属性。在 application.properties 文件中

    2024年02月11日
    浏览(48)
  • Rocket重试机制,消息模式,刷盘方式

    一、 Consumer 批量消费(推模式) Consumer 端先启动   Consumer 端后启动 . 正常情况下:应该是 Consumer 需要先启动 consumer.setConsumeMessageBatchMaxSize(10);// 每次拉取 10 条 package quickstart; import java.util.List; import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer; import com.alibaba.rocketmq.client.con

    2024年02月07日
    浏览(34)
  • rabbitmq消息阻塞情况分析;自动重试处理异常

    消费者因为代码问题出现了异常,此时默认是自动提交的消息,这个 RuntimException 会导致消息直接重新入队,再次投递(进入队首),此时会导致后面的消息被阻塞. auto 自动确认分四种情况,第一种就是正常消费,其他三种则为异常情况 消息成功被消费,没有抛出异常,则自

    2024年02月17日
    浏览(46)
  • RabbitMQ的消费者处理消息失败后可以重试,重试4次仍然失败发送到死信队列。

    生产者发送消息时采用雪花算法给消息设置唯一的消息id,消费者接收消息处理失败时,根据消息的唯一id统计失败次数,若没有达到失败次数限制,则让消息重回队列(在开启手动签收的前提),此时队列会再次给消费者发送消息;若达到失败次数限制,则让消息不重回队列,

    2024年02月07日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包