我们有一个项目,我们最近需要使用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")
}
答案 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然后更改我的调用来找到错误。
由于