如何在activemq grails app中配置tempusage

时间:2015-11-13 10:18:35

标签: grails activemq

我正在使用jms在两个应用程序之间发送消息,这是接收器应用程序的代码

xmlns amq:"http://activemq.apache.org/schema/core"

amq.'broker'(
        useJmx: '${grails.jms.useJmx}',
        persistent:'${grails.jms.persistent}',
        dataDirectory: '${grails.jms.dataDirectory}'){
    amq.'transportConnectors'{
        amq.'transportConnector'(uri:'${grails.jms.transportConnector}')
    }
}

amqConnectionFactory(ActiveMQConnectionFactory) {
    brokerURL = '${grails.jms.brokerUrl}'
}

jmsConnectionFactory(SingleConnectionFactory) {  bean ->
    targetConnectionFactory = ref(amqConnectionFactory)
}

我可以运行应用程序,但收到错误     “存储限制为102400 mb,而数据目录:/ my-activemq-data / localhost / KahaDB在控制台中只有7438 mb的可用空间”。我只想配置临时内存使用情况,任何人都可以帮助我。感谢

2 个答案:

答案 0 :(得分:3)

您使用的是https://grails.org/plugin/activemq插件吗? 如果是这样,我将该功能正好添加到插件中。 该插件允许以下配置选项(只需将它们放在Config.groovy中):

grails.activemq.active = (true|false) default to true
grails.activemq.useJms = (true|false) default to false
grails.activemq.startBroker = (true|false) default to true
grails.activemq.brokerId = (string) default to "brokerId"
grails.activemq.brokerName = (string) default to "localhost"
grails.activemq.persistent = (true|false) default to false
grails.activemq.port = (int) default to 61616
grails.activemq.tempUsageLimit = (size in bytes) defaults to 64Mb
grails.activemq.storeUsageLimit = (size in bytes) defaults to 64Mb

如果你没有使用插件,也许你应该:)

作为参考,这是我用于大多数项目的resources.groovy文件(它依赖于基于应用服务器jndi的JMS服务进行测试和生产,并使用activemq进行开发):

import grails.util.Environment
import org.apache.activemq.ActiveMQConnectionFactory
import org.springframework.jms.connection.SingleConnectionFactory
import org.springframework.jndi.JndiObjectFactoryBean

beans = {

    switch(Environment.current) {
        case Environment.PRODUCTION:
        case Environment.TEST:
            jmsConnectionFactory(JndiObjectFactoryBean) {
                jndiName = "java:/ConnectionFactory"
            }
            break

        case Environment.DEVELOPMENT:
            jmsConnectionFactory(SingleConnectionFactory) {
                targetConnectionFactory = { ActiveMQConnectionFactory cf ->
                    brokerURL = 'vm://localhost'
                }
            }
            break
    }
}

我在使用ActiveMQ和activemq插件时遇到了同样的问题,因此我发出了一个拉取请求,添加了这些配置选项,并将它们设置为64Mb的更合理的默认值(用于开发)。

如果您使用该插件,您只需将其添加到您的BuildConfig插件部分,它应该可以正常工作而无需进一步配置,只需在config / spring中的resources.groovy。

无论如何,如果您需要其中任何一个,我描述的选项应该进入Config.groovy。

答案 1 :(得分:1)

最后,我解决了我的问题。这是更新后的resource.groovy

activeMQTempUsage(TempUsage) {
    activeMQTempUsage.limit = 1024 * 1024 * 1024 
}

activeMQStoreUsage(StoreUsage) {
    activeMQStoreUsage.limit = 1024 * 1024 * 1024
}

activeMQSystemUsage(SystemUsage){
    activeMQSystemUsage.tempUsage = ref('activeMQTempUsage')
    activeMQSystemUsage.storeUsage = ref('activeMQStoreUsage')
}

tcpConnector(TransportConnector,uri:'tcp://localhost:61616') {   
}

connectors(ArrayList,[ref('tcpConnector')]){
}

myBrokerService(XBeanBrokerService){bean->
    myBrokerService.useJmx = false
    myBrokerService.persistent = true
    myBrokerService.dataDirectory = 'my-activemq-data'
    myBrokerService.systemUsage = ref('activeMQSystemUsage')
    myBrokerService.transportConnectors = ref('connectors')
}

amqConnectionFactory(ActiveMQConnectionFactory) {
    brokerURL = 'vm://localhost'
}

jmsConnectionFactory(SingleConnectionFactory) {  bean ->
    targetConnectionFactory = ref(amqConnectionFactory)
}

使用XbeanBrokerService属性我们可以实现这一点,如果我们想要添加更多配置,我们可以使用XbeanBrokerService的属性添加,如上所述。