Ich arbeite derzeit an einem Hase-amqp-Implementierungsprojekt und verwenden Sie Spring-Rabbit, um alle meine Warteschlangen, Bindungen und Austausche programmgesteuert einzurichten. (Spring-Rabbit-1.3.4 und Spring-Framework Versionen 3.2.0)Dynamisch neue Warteschlangen, Bindungen und Austausch als Beans hinzufügen
Die Deklaration in einer Java-Konfiguration-Klasse oder XML-basierte Konfiguration sind meiner Meinung nach ziemlich statisch erklärt. Ich weiß, wie ein dynamischer Wert setzen für eine Warteschlange, Austausch oder Bindung wie folgt aus (ex einen Namen.):
@Configuration
public class serverConfiguration {
private String queueName;
...
@Bean
public Queue buildQueue() {
Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
buildRabbitAdmin().declareQueue(queue);
return queue;
}
...
}
Aber ich frage mich, ob es möglich war, eine nicht definierte Menge Instanzen Queue zu erstellen und registrieren Sie sie als Bohnen wie eine Fabrik und registrieren Sie alle ihre Instanzen.
Ich bin nicht wirklich vertraut mit dem Spring @Bean Annotation und seine Grenzen, aber ich versuchte
@Configuration
public class serverConfiguration {
private String queueName;
...
@Bean
@Scope("prototype")
public Queue buildQueue() {
Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
buildRabbitAdmin().declareQueue(queue);
return queue;
}
...
}
Und zu sehen, ob die mehreren Bohnen Instanzen Queue registriert Ich nenne:
Map<String, Queue> queueBeans = ((ListableBeanFactory) applicationContext).getBeansOfType(Queue.class);
Aber das wird wieder nur 1-Zuordnung:
name of the method := the last created instance.
Ist es möglich, dynamica Hinzufügen von Beans während der Laufzeit zum SpringApplicationContext?
Das klingt wie eine JMX-Aufgabe. – chrylis