当前位置: 首页 > news >正文

RMQ消息发送失败处理

对于消息发送失败,可能会有多个不可控的因素造成:

1,发送消息的时候,网络不稳定

2,MQ服务器宕机

3,接收消息的服务挂掉,最终都会导致对数据库的操作失败

解决办法

一,发送者重连

在配置中开启重连机制,配置超时处理

此时如果发送失败,会继续尝试重新发送,还是失败程序结束

 

对于发送者重连有一个问题:因为 虽然convertAndSend 默认是非阻塞式的,但是重连机制是阻塞式的,它会影响主线程,重连的过程中当前线程是阻塞的,所以此时最后一句不会执行。它会等待重连的结果。

解决:如果将消息发送放到异步线程,即使阻塞也不会影响主线程

启动类上开启异步线程Async

使用@Async标记的方法会在单独的线程中运行,不会阻塞主线程,在主线程中调用异步线程

 可以看到不仅尝试重连了,还没有阻塞主线程。

所以前面说消息发送本身是异步非阻塞的,前提是发送成功即发送的那一行不会抛出异常触发重连机制,不管发送成功或失败都交给异步进行处理,减少耦合与耗时。

还有发送者确认机制。

二,保证MQ可靠性

1,交换机,队列,消息的持久化(Message对象重构),保证消息可靠性。

 2,懒队列,收到消息后直接存磁盘,跳过内存。3.12版本后默认都是懒队列。老版本需要自己配置。

三,消费者可靠性(有没有成功处理消息)

消费者确认机制以及消费者失败重试。

RMQ异步通信icon-default.png?t=O83Ahttps://mp.csdn.net/mp_blog/creation/editor/143577224


http://www.mrgr.cn/news/67940.html

相关文章:

  • 解析静态链接
  • 理解Web登录机制:会话管理与跟踪技术解析(二)-JWT令牌
  • MP2315 DC-DC电源芯片引脚功能说明
  • 基于STM32的温室自主灌溉系统(论文+源码)
  • 初识arkts2
  • 父组件调用函数式子组件,并向子组件传递函数参数。
  • PCL截取ROI
  • 123456789
  • CORS(跨域资源共享)和SOP(同源策略)
  • C++从零到满绩——命名空间、输入输出and缺省参数
  • 架构师:如何提高web网站的请求并发响应量?
  • 高速电机精确控制
  • kafka+zookeeper的搭建
  • 【笔记】变压器-热损耗-频响曲线推导 - 04 额定功率处损耗特性
  • 【jmeter】jmeter的线程组功能的详细介绍
  • lua入门教程:ipairs
  • JMM内存模型详解
  • 【wxWidgets GUI设计教程 - 高级布局与窗口管理】
  • 「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
  • ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle