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 {
    }
}

 

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