解决spring boot在RabbitMQ堆积消息情况下无法启动问题
最近遇到一个问题,服务站点上线之前,先去新建需要的rabbitmq并绑定关系,此时 如果发送消息方运行,
那边会造成新建的q消息部分堆积得不到及时消费
那么问题来了?
在消息堆积情况下,服务站点无法启动,导致一直卡在那里的情况。
而消费端干了什么呢?
1.调用第三方服务查询数据
2.查询数据库数据并更新操作
经过调试我们分析下,在调用第三方服务的时候,卡在那里 了
那么什么原因导致呢?
spring在启动的时候,会监听q 执行消费,而消费里面的逻辑代码中的相关组件还没初始化导致。
怎么解决这个问题呢?
第一个方案:
1.解除绑定关系,清理消息,重新启动站点,绑定消息关系
2.修改代码
之前代码是这样的
public abstract class BaseMqJob implements Handler{
protected String namespace;
protected String queueName;
protected int consumerNum;
@Autowired
protected MQService mqService;
/**
* 初始化MQ参数
*/
public abstract void initParams();
@PostConstruct
public void startListener(){
initParams();
System.out.println("队列"+queueName+"监听开始...");
listener(namespace,queueName,consumerNum,this);
}
private void listener(String namespace,String queue,int consumerNum,Handler handler){
mqService.listener(namespace,queue,consumerNum,handler);
}
}
使用了@PostConstruct,此时需要把这个注解去掉,这个和这个注解执行的顺序有关@PostConstruct
然后新增一个类:
/**
* Created by lichuanjie on 2018/10/18.
*/
@Component
@Slf4j
public class ManageListener {
@Autowired
private OrderDeliveryFreeGiftMQListener giftMQListener;
@Autowired
private ProductChangeMQListener productChangeMQListener; @EventListener
public void handleContextRefresh(ContextRefreshedEvent event){
giftMQListener.startListener();
productChangeMQListener.startListener();
}
}
这种方式就会在其他容器启动之后去监听q消息
解决spring boot在RabbitMQ堆积消息情况下无法启动问题的更多相关文章
- Spring Boot (十三): Spring Boot 整合 RabbitMQ
1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用 ...
- 85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】
这一节我们介绍下Spring Boot整合RabbitMQ,对于RabbitMQ这里不过多的介绍,大家可以参考网络上的资源进行安装配置,本节重点是告诉大家如何在Spring Boot中使用Rabbit ...
- 解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题
解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring S ...
- spring boot 集成 websocket 实现消息主动推送
spring boot 集成 websocket 实现消息主动 前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单 ...
- Spring Boot 集成 RabbitMQ 实战
Spring Boot 集成 RabbitMQ 实战 特别说明: 本文主要参考了程序员 DD 的博客文章<Spring Boot中使用RabbitMQ>,在此向原作者表示感谢. Mac 上 ...
- 如何解决spring boot 项目导入依赖后代码报错问题
如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15 14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片)
- 解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level
解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level 学习了:https://blog.csdn. ...
- Spring Boot 2.x 快速入门(下)HelloWorld示例详解
上篇 Spring Boot 2.x 快速入门(上)HelloWorld示例 进行了Sprint Boot的快速入门,以实际的示例代码来练手,总比光看书要强很多嘛,最好的就是边看.边写.边记.边展示. ...
- spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动
spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动 @echo offcd D:\workProject\bushustart cmd /c "title ...
随机推荐
- epson Robot 指令集合
******************************************************************* 目的:定义一个整型数据 原型:Integer varName[( ...
- Vue组件的定义方式
1.使用template标签定义组件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- 【1】Kali Linux的安装及配置
爱生活就得够GEEK. ---------------------------------------------------------------完美的分割线------------------- ...
- quartz (一) 基于 Quartz 开发企业级任务调度应用
本文转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ Quartz 基本概念及原理 Quartz Scheduler 开 ...
- react-native android 打包发布
react-native android 打包步骤 <一>.生成签名文件(应用身份证) 1.使用keytool命令 keytool -genkey -v -keystore my-r ...
- Python --之练习题
一,两个小组对战,对战规则如下:team1 = ['a','b','c']team2 = ['x','y','z'] #a 不和x对战,b 不和y,z 对战# for i in team1: #法一# ...
- GATK的硬过滤
https://software.broadinstitute.org/gatk/documentation/article.php?id=2806
- 深度学习:Keras入门(一)之基础篇【转】
本文转载自:http://www.cnblogs.com/lc1217/p/7132364.html 1.关于Keras 1)简介 Keras是由纯python编写的基于theano/tensorfl ...
- asm-3.3.1.jar详解 (转)
Java字节码操纵框架.它可以直接以二进制形式动态地生成stub类或其他代理类,或者在装载时动态地修改类.ASM提供类似于BCEL和SERP之类的工具包的功能,但是被设计得更小巧.更快速,这使它适用于 ...
- LeetCode——Counting Bits
Question Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calcu ...