【发布时间】:2016-02-27 06:25:11
【问题描述】:
我正在使用 grails jms-1.3plugin 并且我有一个问题,即我的 jms 侦听器服务在应用程序完全启动并运行之前开始使用来自 activeMQ 的消息。当我尝试将一些消息写入数据库时,这会导致错误。
所以我的问题是,我怎样才能设法从队列中手动开始消费。这样我就可以将 autoStartup 设置为 false。
这是我的示例 grails 代码:
ConsumerService.groovy
package jmsstartstop
import grails.plugin.jms.Queue
class ConsumerService {
static exposes = ["jms"]
@Queue(name="liesMich")
def receiveMessage(String msg) {
log.info("Received Message:" + msg)
}
}
resources.groovy
import org.apache.activemq.ActiveMQConnectionFactory
import org.springframework.jms.connection.SingleConnectionFactory
beans = {
jmsConnectionFactory(SingleConnectionFactory) {
targetConnectionFactory = { ActiveMQConnectionFactory cf ->
brokerURL = grailsApplication.config.jms.brokerURL
}
}
}
Config.groovy
jms{
brokerURL='tcp://localhost:61616'
containers {
standard {
autoStartup = false
}
}
}
我正在寻找类似jmsConnectionFactory.getTargetConnectionFactory().start() 的东西,可以在Bootstrap.groovy 中调用,也可以在控制器中手动调用。但遗憾的是TargetConnectionFactory中不存在这个启动方法。
有没有办法,或者有什么其他的建议?
Bootstrap.groovy(不起作用)
class BootStrap {
def jmsConnectionFactory
def init = { servletContext ->
jmsConnectionFactory.??WHATEVER??.start()
}
def destroy = {
}
}
【问题讨论】:
-
这似乎已在最新的 SNAPSHOT 中修复(请参阅:github.com/gpc/jms/commit/…)尝试使用
:jms:1.3-SNAPSHOT -
你的权利,谢谢你的提示。