zoukankan      html  css  js  c++  java
  • java 动态增加应用服务器,出现的消息队列的消费者提报错问题

    java 动态增加应用服务器,出现的消息队列的消费者提报错问题

      在项目中,有这样的业务场景,在某一个时间段,客户流量瞬间增大,服务器瞬间很大,出现高并发问题。有一种解决方案就是脚本动态增加业务服务器,来缓解系统瞬间达到的流量。

      但是在现实中,会出现一个问题,就是在动态增加应用服务器的时候,会报错:很多空指针。初步确定的原因是:

        在服务器启动的环节,加载bean的时候,先加载了mq的消费者的bean,并且开始了消费者接受消息订阅。但是这个时候applicationContext都还没有加载,导致在消费者接受消息,到各个业务方法中时,调用很多对象就报空指针了。

      所以想得办法就是在项目启动完成后,在初始化有关mq的bean.直接贴上代码:

    @Component
    @Slf4j
    public class RocketConsumerInit implements ApplicationListener<ContextRefreshedEvent> {
    
        private static final String CONSUMER_BEAN_NAME_SUFFIX = "Consumer";
    
        private static final String PRODUCER_BEAN_NAME_SUFFIX = "Producer";
    
        @Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
            final ApplicationContext app = event.getApplicationContext();
            DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) app.getAutowireCapableBeanFactory();
            Arrays.stream(defaultListableBeanFactory.getBeanDefinitionNames()).filter(beanName -> beanName.endsWith(CONSUMER_BEAN_NAME_SUFFIX) || beanName.endsWith(PRODUCER_BEAN_NAME_SUFFIX)).forEach(beanName -> {
                System.out.println("bean_name = " + beanName);
                defaultListableBeanFactory.getBean(beanName);
            });
        }
    }
  • 相关阅读:
    Python从文件中读取数据
    Python中类的继承
    Python中的类(2)
    Python中的类
    自动登陆抽屉(1)
    爬取汽车之家新闻
    Django简介
    web应用,http协议简介,web框架
    CentOS7安装python3.6
    MySQL之索引
  • 原文地址:https://www.cnblogs.com/zhaowei520/p/13932542.html
Copyright © 2011-2022 走看看