Camel的新手,所以也许我误会了处理器和bean应该如何交互。我们在骆驼路线中记录了一些我们想做的数据库。想法是在处理器中执行此操作。但是,我们也想从bean中进行此日志记录。那可能吗?我知道我可以将它作为bean的返回字段传递回来...但是它已经传递了返回值。
一个相关的问题是,如何认为该身份是交换属性或标头,如何传递该身份。
基本上我想要一些类似的东西
处理器
class EventStatusProcessor implements Processor {
@Override
void process(Exchange exchange) throws Exception {
// do some stuff, thinking this will be a header
}
}
路线
from("direct:route1")
.bean(doSomething, 'doSomething')
.process(new EventStatusProcessor())
bean
@Component
@Slf4j
class DoSomething{
String doSomething()
//doing stuff
new EventStatusProcessor().process()
答案 0 :(得分:0)
您也可以将Exchange
传递给使用bean组件调用的方法,并根据需要在其中设置标题/属性/正文/任何内容。
class DoSomething {
@SuppressWarnings("unused") //called via Camel bean invocation
public void doSomething(Exchange exchange){
exchange.setProperty("propertyFromDoSomething", "Hello, I am property");
exchange.getIn().setHeader("headerFromDoSomething", "Hi, I am header");
exchange.getIn().setBody("It's me, body!");
}
}
class EventStatusProcessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println(exchange.getIn().getHeader("headerFromDoSomething", String.class));
System.out.println(exchange.getProperty("propertyFromDoSomething", String.class));
System.out.println(exchange.getIn().getBody(String.class));
}
}
如果您确实需要在标题中调用处理器 inside bean,请提取处理器到direct
路由,然后用ProducerTemplate调用它。
RouteBuilder
from("direct:log")
.process(new EventStatusProcessor());
DoSomething类
public class DoSomething {
@SuppressWarnings("unused") //called via Camel bean invocation
public void doSomething(Exchange exchange){
exchange.getContext().createProducerTemplate().sendBody("direct:log", "I am body and I will be passed to EventStatusProcessor");
}
}