实际上在参与该交换处理器加入的属性在onCompletion()
和EventNotifierSupport#notify()
在两个这些回调即可用。
演示此行为的最小示例可以通过在CamelContext
上注册以下回调进行复制。
// Create listener
EventNotifierSupport eventNotifierSupport = new EventNotifierSupport(){
@Override
public void notify(EventObject event) throws Exception {
if (event instanceof ExchangeCompletedEvent) {
assert ((ExchangeCompletedEvent) event).getExchange().getProperties().containsKey("ADDED");
}
}
...
}
// Register listener in CamelContext
CamelContext camelContext = new DefaultCamelContext();
camelContext.getManagementStrategy().addEventNotifier(eventNotifierSupport);
如果创建与设置属性发送给它的消息processor路线...
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getProperties().put("ADDED","ADDED");
}
});
}
});
camelContext.start();
camelContext.createProducerTemplate().sendBody("direct:start", "addPropertyToMe");
...你会看到侦听器断言总是通过。这符合骆驼文件,其中说交易副本将在交易完成后(即交易所已被修改)发送给听众。
你的问题在别处。我会帮助你,如果你给我提供一个最简单的例子,就是在处理器中设置属性但是在回调中丢失的情况。
对不起,我没有早点回复你 - 只是注意到我有一个答案。你能告诉我你使用的是什么版本的骆驼?我似乎无法得到你所看到的同样的行为。谢谢 – Derek
嗨德里克。我正在使用骆驼2.9.2。 –