【问题标题】:How to configure tempusage in activemq grails app如何在activemq grails app中配置tempusage
【发布时间】:2015-12-07 16:16:59
【问题描述】:

我正在使用 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 的可用空间”在控制台中。我只想配置临时内存使用情况,任何人都可以帮我解决这个问题。谢谢

【问题讨论】:

    标签: grails activemq


    【解决方案1】:

    您在使用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。

    【讨论】:

    • 感谢您的信息,你能检查一下这是我的 config.groovy grails{ jms{ useJmx = false persistent = true dataDirectory = 'my-activemq-data' brokerUrl = 'vm://localhost ' transportConnector = 'tcp://{IP}:{port}' } }
    • 我认为你把事情搞混了。该插件没有 dataDirectory 配置选项,目前没有 0.5 版。您的一些选项确实应该在 resources.groovy 中。我将使用示例 resources.groovy(我使用的那个)更新答案。
    【解决方案2】:

    最后,我找到了解决问题的方法。这是更新后的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 的属性添加。

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 1970-01-01
      • 2017-09-21
      • 2015-01-28
      • 2011-10-31
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多