rabbitmq动态注入队列bean到spring容器

如果有几百个队列,正常做法是用@Bean方法将队列注入到Queue对象中,但这样太麻烦了,
我们可以把队列放到list中,然后再循环动态注入到spring容器中,
@Configuration
public class AutoBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

        BeanDefinitionBuilder beanDefinitionBuilder;
        BeanDefinition beanDefinition;

        List<String> queueList = new QueueConstant().getQueueList();
        for (String queue: queueList) {
            //构建对象
            beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(Queue.class);
            //输入构造参数
            beanDefinitionBuilder.addConstructorArgValue(queue);
            beanDefinitionBuilder.addConstructorArgValue(true);
            //注册对象
            beanDefinition = beanDefinitionBuilder.getBeanDefinition();
            registry.registerBeanDefinition(queue + "Queue", beanDefinition);

            //构建对象
            beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(Binding.class);
            //输入构造参数
            beanDefinitionBuilder.addConstructorArgValue(queue);
            beanDefinitionBuilder.addConstructorArgValue(Binding.DestinationType.QUEUE);
            beanDefinitionBuilder.addConstructorArgValue(ExchangeConstant.OLD_LOG_EXCHANGE);
            beanDefinitionBuilder.addConstructorArgValue(queue);
            beanDefinitionBuilder.addConstructorArgValue(Collections.emptyMap());
            //注册对象
            beanDefinition = beanDefinitionBuilder.getBeanDefinition();
            registry.registerBeanDefinition(queue + "Bind", beanDefinition);
        }
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章