【问题标题】:How to start RabbitMQ listener after application boot?应用程序启动后如何启动 RabbitMQ 监听器?
【发布时间】:2012-06-14 08:24:16
【问题描述】:

您好,我在我的 Grails 应用程序中使用 RabbitMQ,并且正在寻找如何延迟侦听器启动的方法。它们现在是在我的应用程序的整个连接完成之前启动的,所以我想在启动后启动它们..关于如何做到这一点有什么建议吗?

我正在为此使用 xml 配置..

<rabbit:listener-container connection-factory="connectionFactory" message converter="jsonMessageConverter" acknowledge="auto">
    <rabbit:listener queue-names="log.soap.in" ref="logSoapInListener" />
</rabbit:listener-container>

因此,当我的 grails 应用程序启动时,上下文已启动,但所有连接都需要一段时间。因此,在我的应用程序启动期间,已经调用了侦听器,但无法正确处理消息。

class LogSoapListenerService implements MessageListener {

    LogSoapService logSoapService

    JsonMapper jsonMapper

    @Override
    void onMessage(Message message) {
        String body = new String(message.body, message.properties.contentEncoding ?: "UTF-8")
        logSoapService.process(body)
    }
}

【问题讨论】:

  • 大概是和你代码的顺序有关吧?如果不是,我可能误解了,您可能需要提供更多信息。
  • 用代码更新了我的问题,代码的顺序似乎没有问题。侦听器在整个 Grails 应用程序完全连接和配置之前启动。
  • 什么类型的听众?你在使用 RabbitMQ 插件吗?插件configures the message listener container 使其不会自动启动。一旦应用程序上下文准备好,它就会显式地启动它们。
  • 我在使用最新的 RC1 插件时遇到了一些问题,因此决定尝试手动方式。插件的 RC1 有一些严重的问题阻碍了我的进步。因为我想帮助插件,所以我只需要有限的知识来修改现有的插件等。如果 RC2 或 1.0 能够发布,那就太好了。发生这种情况时,我会很乐意使用该插件!!!

标签: grails rabbitmq amqp


【解决方案1】:

我遇到了一个类似的问题,这就是我最终添加到 RabbitmqGrailsPlugin 文件的内容,我有一个本地版本作为我项目的一部分,

在doWithApplicationContext方法里面,我改了,

// Now that the listener is properly configured, we can start it.
bean.start()

到

// Now that the listener is properly configured, we can start it.
def startDelay = application.config.rabbitmq.startDelay ?: 0
new Timer().runAfter(startDelay, {
    bean.start()
})

然后您只需要配置 rabbitmq.startDelay 来设置您想要的任何延迟。

更优雅的解决方案是确保在其他插件之后加载 rabbitmq,但 Grails 似乎对此没有很好的支持。见Can I control plugin load order from outside a plugin in Grails?

另一种解决方案(仅当您在本地安装了插件时才可用)是指定在导致问题的任何插件之后加载插件,

例如,

def loadAfter = ['services']

变成

def loadAfter = ['services', 'converters', 'mail']

【讨论】:

  • 在 java 中看起来类似
猜你喜欢
  • 2014-10-19
  • 2011-11-27
  • 2015-12-29
  • 1970-01-01
  • 2020-04-27
  • 2017-03-07
  • 2010-12-30
  • 2012-01-13
  • 2016-02-27
相关资源
最近更新 更多