如何在 activemq grails 应用程序中配置 tempusage

How to configure tempusage in activemq grails app

我正在使用 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)
}

我可以 运行 该应用程序,但出现如下错误 "Store limit is 102400 mb, whilst the data directory: /my-activemq-data/localhost/KahaDB only has 7438 mb of usable space" 在控制台中。我只想配置临时内存使用情况,谁能帮我解决这个问题。谢谢

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

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