在grails中配置ActiveMQ代理



为grails使用Jms插件并为ActiveMQ添加依赖项非常有效。没有问题。

现在,我想进行一些自定义和微调,以使ActiveMQ的行为符合我的需要,因此我需要配置代理实例。

例如,我想使用JDBC存储。

如何使用grails和vm嵌入式代理来实现这一点?

实际上,我已经遵循了JMS grails插件的参考文档。。。我添加jms插件和activemq依赖项,并将其放在资源上:

jmsConnectionFactory(SingleConnectionFactory) {
    targetConnectionFactory = { ActiveMQConnectionFactory cf ->
        //brokerURL = 'vm://localhost'
        brokerURL = 'tcp://localhost:61616?jms.useAsyncSend=true'
    }
}

正如我所说的,这很好。。。但我需要更多的调优,所以我尝试在资源中添加它,这样我就可以访问代理进行微调:

/* Establish the broker */
amq.broker(useJmx: false, persistent: true) {
    amq.transportConnectors() {
        amq.transportConnector(uri: "tcp://localhost:61616")
    }
}
amqConnectionFactory(ActiveMQConnectionFactory) {
    brokerURL = "vm://localhost"
}
jmsConnectionFactory(SingleConnectionFactory) {
    targetConnectionFactory = ref(amqConnectionFactory)
}

但我开始有依赖性问题,比如:

2015-03-18 13:44:14 - spring.RuntimeSpringConfigUtilities [RuntimeConfiguration] Unable to load beans from resources.groovy
org.springframework.beans.FatalBeanException: NamespaceHandler class [org.apache.xbean.spring.context.v2.XBeanNamespaceHandler] for namespace [http://activemq.apache.org/schema/core] not found; nested exception is java.lang.ClassNotFoundException: org.apache.xbean.spring.context.v2.XBeanNamespaceHandler

所以我开始添加依赖项:

    compile 'org.apache.activemq:activemq-spring:5.7.0'
    compile 'org.springframework:spring-beans:4.1.1.RELEASE'
    compile 'org.apache.xbean:xbean-spring:4.1' 

但仍然存在问题:

java.lang.NoClassDefFoundError: org/springframework/core/OrderComparator$OrderSourceProvider

在这一点上,我感觉自己做错了什么,因为我看到了太多的复杂性。

有最好的方法吗?

为了能够配置ActiveMQ,您需要:

依赖项:

    compile 'org.apache.activemq:activemq-core:5.7.0'
    compile 'org.apache.activemq:activemq-spring:5.7.0'
    compile 'org.springframework:spring-beans:4.0.6.RELEASE'
    compile 'org.apache.xbean:xbean-spring:4.1'  

Resources.groovy:

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

/* Establish the broker */
amq.broker(useJmx: false, persistent: true) {
    amq.transportConnectors() {
        amq.transportConnector(uri: "tcp://localhost:61616")
    }
    //HERE YOU CAN CONFIGURE BROKER
}
amqConnectionFactory(ActiveMQConnectionFactory) {
    brokerURL = "vm://localhost"
}
jmsConnectionFactory(SingleConnectionFactory) {
    targetConnectionFactory = ref(amqConnectionFactory)
}

Rafael的上述答案非常有用,只是如果您使用Grails 3.2.+,您需要做的一个小更改。我花了几个小时才弄清楚。

部门(在build.gradle中添加)

compile 'org.grails.plugins:jms:2.0.0.RC2'
compile 'org.apache.activemq:activemq-core:5.7.0'
compile 'org.apache.activemq:activemq-spring:5.14.5'
compile 'org.apache.xbean:xbean-spring:4.1'

Resources.groovy(看起来应该有点像)

import org.apache.activemq.ActiveMQConnectionFactory
import org.springframework.jms.connection.SingleConnectionFactory
beans = {
    ....
    xmlns amq:"http://activemq.apache.org/schema/core"
    amq.broker(useJmx: false, persistent: true) {
    amq.transportConnectors() {
        amq.'transportConnector'(uri: "tcp://localhost:61616")
        // optional if you want to do something with mqtt
        amq.'transportConnector'(uri:'mqtt://0.0.0.0:61612')
        }
    }
    jmsConnectionFactory(SingleConnectionFactory) {
        targetConnectionFactory = { ActiveMQConnectionFactory cf ->
            brokerURL = 'vm://localhost'
        }
    }
    ...
}

最新更新