【问题标题】:Configure ActiveMQ broker in grails在 grails 中配置 ActiveMQ 代理
【发布时间】:2015-05-21 03:34:09
【问题描述】:

为 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 配置为使用 MySQL 持久性而不是 KahaDB 或文件系统
  • cfrick 正在谈论 SO question 验证器。但是,查看此插件的源代码 (github.com/domix/grails-activemq) 似乎没有公开任何配置 ActiveMQ 的方法。为了以这种方式进一步配置它,您将不得不查看 ActiveMQ 支持的内容(可能是类路径上的配置文件/设置)或不使用插件。
  • 对不起,我可能没有很好地解释......我正在使用 jms 插件......但不是 grails-activemq 插件。
  • 好的...我改进了信息。谢谢你的意见。

标签: grails jms activemq


【解决方案1】:

为了能够配置 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)
}

【讨论】:

    【解决方案2】:

    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'
            }
        }
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      相关资源
      最近更新 更多