• 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);
            });
        }
    }
  • 相关阅读:
    vc文件读写,用fstream和CStdioFile
    使用批处理启用或禁用端口
    什么是qt,QT Creator, QT SDK, QT Designer
    C#结构体特性
    VC++对话框中添加状态栏的方法
    [转]字符编码,ansi, unicode,utf8, utf16
    TRANSACTIONAL TEXT INDEX全文索引可能消耗大量PGA内存
    解决Oracle中Split Partition缓慢的问题
    ORA00600
    计算Oracle数据库软件许可证License的使用量
  • 原文地址:https://www.cnblogs.com/zhaowei520/p/13932542.html
Copyright © 2020-2023  润新知