Установка Rabbitmq в Граале
Я столкнулся с проблемой конфигурации с Rabbitmq и Grails. Мне было интересно, сталкивался ли кто-нибудь еще с этой конкретной ситуацией.
Моя конфигурация rabbitmq в config.groovy выглядит так:
environments {
production {
rabbitmq {
connectionfactory {
username = '******'
password = '******'
hostname = 'ip-******.ec2.internal'
channelCacheSize = 25
prefetchCount = 10
concurrentConsumers = 3
}
retryPolicy {
maxAttempts = 10
}
queues = {
exchange name: 'plover', type: topic, durable: true, {
error durable: true, binding: 'error.#'
user durable: true, binding: 'user.#'
track durable: true, binding: 'track.#'
klout durable: true, binding: 'klout.#'
showuser durable: false, binding: 'showuser.#'
network durable: true, binding: 'network.#'
customer durable: true, binding: 'cusotmer.#'
recommend durable: true, binding: 'recommend.#'
pusher durable: true, binding:'pusher.#'
backfill durable: true, binding: 'backfill.#'
mail durable: true, binding: 'mail.#'
checkaction durable: true, binding: 'checkaction.#'
timertasks durable: true, binding: 'timertasks.#'
mission durable: true, binding: 'mission.#'
sentiment durable: true, binding: 'sentiment.#'
updateuser durable: false, binding: 'updateuser.#'
googlereader durable: true, binding: 'googlereader.#'
flickr durable: true, binding: 'flickr.#'
}
exchange name:'pubsub', type: fanout, durable: true
}
}
}
development {
rabbitmq {
connectionfactory {
username = 'guest'
password = 'guest'
hostname = 'localhost'
channelCacheSize = 25
prefetchCount = 10
concurrentConsumers = 3
}
retryPolicy {
maxAttempts = 10
}
queues = {
exchange name: 'plover', type: topic, durable: true, {
error durable: true, binding: 'error.#'
user durable: true, binding: 'user.#'
track durable: true, binding: 'track.#'
klout durable: true, binding: 'klout.#'
showuser durable: false, binding: 'showuser.#'
network durable: true, binding: 'network.#'
customer durable: true, binding: 'cusotmer.#'
recommend durable: true, binding: 'recommend.#'
pusher durable: true, binding:'pusher.#'
backfill durable: true, binding: 'backfill.#'
mail durable: true, binding: 'mail.#'
checkaction durable: true, binding: 'checkaction.#'
timertasks durable: true, binding: 'timertasks.#'
mission durable: true, binding: 'mission.#'
sentiment durable: true, binding: 'sentiment.#'
updateuser durable: false, binding: 'updateuser.#'
googlereader durable: true, binding: 'googlereader.#'
flickr durable: true, binding: 'flickr.#'
}
exchange name:'pubsub', type: fanout, durable: true
}
}
}
}
Таким образом, все параметры конфигурации Rabbitmq выполняются в среде производства / разработки, как и предполагалось.
Тем не менее, когда я пытаюсь запустить на производственной или локальной разработке, я получаю следующую ошибку:
2013-04-18 13: 23: 10,583 [pool-7-thread-1] ОШИБКА RabbitmqGrailsPlugin - Параметры фабрики соединений RabbitMQ (rabbitmq.connectionfactory.username, rabbitmq.connectionfactory.password и rabbitmq.connectionfactory.hostname) должны быть определены в Config.groovy
И я не вижу, как мои настройки конфигурации нарушены. Конфигурация среды Grails не работает так, как задокументировано?
Майк
1 ответ
Оказывается, что версия Groovy, которую мы используем, содержит ошибку в ConfigSlurper, которая предотвращает несколько блоков Environments. Так что, если вы считаете, что в вашем config.groovy может быть несколько выражений Environments { Production {} Development {} Test {} }, то вы увидите довольно странное поведение.
На этой ошибке есть Jira. Я полагаю, что это будет исправлено в Groovy 2.1 или если вы хотите применить патч, представленный здесь. Я не очень доверяю патчам, поэтому я свел все различные среды в одно большое выражение (выглядит довольно некрасиво), и это решило проблему.