Grails Camel Routing Plugin无法识别sendMessage

时间:2015-08-06 11:26:49

标签: grails groovy apache-camel

我们有一个项目,我们最近需要使用Camel。这个项目是一个Groovy / Grails项目,我已经安装了Routing 1.4.1插件。

然后我继续按照文档中的规定创建一个新路由,如下所示:

package some_package

import org.apache.camel.builder.RouteBuilder

class TestRoute extends RouteBuilder {
    def grailsApplication

    @Override
    void configure() {
        def config = grailsApplication?.config

        // example:
         from('seda:input.queue').to('stream:out')

    }
}

然后我继续使用以下' sendMessage '在我的一个控制器中设置对此路线的调用。命令:

//Camel Testing
def message = "This is some history"
sendMessage("seda:input.queue", message)

但是,在IDE中输入' sendMessage '它说的方法' 未找到类型'对我说,也许我错过了一些东西的导入,但根据文档,这应该适用于所有控制器和服务。

我添加了调试,代码命中了sendMessage行但是没有进入路由方法。

有人可以帮忙吗?

由于

************ ***********

UPDATE

所以我从头开始再次安装所有内容并使用旧版本的InteliJ,简单的示例效果很好。

接下来我尝试了一个更复杂的调用服务示例,但是应用程序在启动时失败,我已将Service,Route和sendMessage数据放在下面:

路线

from("seda:input.queue").filter {
            it.in.body.contains("test")
        }.to("bean:TestService?method=printMsg")

服务

def printMsg(msg){
        println(msg)
    }

的sendMessage

def myMessage = "this is a test message"
sendMessage("seda:input.queue", myMessage)

运行应用程序时出现的错误如下:

Error 2015-08-07 13:46:46,156 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener  - Error initializing the application: groovy.lang.MissingMethodException: No signature of method: org.grails.plugins.routing.processor.PredicateProcessor.to() is applicable for argument types: (java.lang.String) values: [bean:TestService?method=printMsg]
Possible solutions: is(java.lang.Object), any(), use([Ljava.lang.Object;), getAt(java.lang.String), with(groovy.lang.Closure), any(groovy.lang.Closure)
Message: groovy.lang.MissingMethodException: No signature of method: org.grails.plugins.routing.processor.PredicateProcessor.to() is applicable for argument types: (java.lang.String) values: [bean:TestService?method=printMsg]
Possible solutions: is(java.lang.Object), any(), use([Ljava.lang.Object;), getAt(java.lang.String), with(groovy.lang.Closure), any(groovy.lang.Closure)

我希望你能提供帮助。

更新

好的,我删除了过滤器片并加载了应用程序。

然而,当 sendMessage 运行时,我收到以下错误:

Message: No bean could be found in the registry for: TestService

然后我尝试使用以下代码手动添加bean,但仍然得到相同的错误:

void configure() {
        def config = grailsApplication?.config

        SimpleRegistry registry = new SimpleRegistry();
        registry.put("TestService", new TestService());
        CamelContext context = new DefaultCamelContext(registry);

        from("seda:input.queue").to("bean:TestService?method=printMsg")

    }

2 个答案:

答案 0 :(得分:0)

您需要做的是使用ProducerTemplate类,如下所示:

CamelContext context //the Camel Context running your routes
ProducerTemplate template = context.createProducerTemplate()
Object resultBody = template.sendBody("seda:input.queue", "Your body")
println(resultBody) //anything that your route puts in the body

答案 1 :(得分:0)

我已经成功解决了这个问题,而这只是一个豆子的名字。

我通过在上下文中列出所有当前bean然后更改我的调用来找到错误。

由于