私はあなたのための準備ができて解決策を持っていないが、あなたはRabbitmqGrailsPlugin Descriptor特にdoWithSpring
セクション にコードをたどる場合は、実行時に動的に新しいQueue
と関連Listener
を初期化するために必要な手順を再作成することができるはずです。
すべてが必要なパラメータを渡し、必要な豆を登録してリスナーを開始するようになります。
2番目の質問に答えるために、いくつかの命名規則を考え出し、キューごとに新しいキューハンドラを作成することができます。動的に春のBeanを作成する方法の例では、ここで見つけることができます:私はすぐにキューを登録する方法をdynamically declare beans
だけ短い例では、それははるかに配線などを必要と...
def createQ(queueName) {
def queuesConfig = {
"${queueName}"(durable: true, autoDelete: false,)
}
def queueBuilder = new RabbitQueueBuilder()
queuesConfig.delegate = queueBuilder
queuesConfig.resolveStrategy = Closure.DELEGATE_FIRST
queuesConfig()
queueBuilder.queues?.each { queue ->
if (log.debugEnabled) {
log.debug "Registering queue '${queue.name}'"
}
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(Queue.class);
builder.addConstructorArgValue(queue.name)
builder.addConstructorArgValue(Boolean.valueOf(queue.durable))
builder.addConstructorArgValue(Boolean.valueOf(queue.exclusive))
builder.addConstructorArgValue(Boolean.valueOf(queue.autoDelete))
builder.addConstructorArgValue(queue.arguments)
DefaultListableBeanFactory factory = (DefaultListableBeanFactory) grailsApplication.mainContext.getBeanFactory();
factory.registerBeanDefinition("grails.rabbit.queue.${queue.name}", builder.getBeanDefinition());
}
}