实际上,在参与交换的处理器中添加的属性在这两个回调中都可用,即 inonCompletion()
和EventNotifierSupport#notify()
.
演示此行为的最小示例可以通过 EventNotifierSupport
在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);
如果您使用处理器创建一个路由,该处理器将属性设置为发送给它的消息......
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");
...您会看到侦听器中的断言总是通过。这与 Camel 文档一致,即交易完成后(即交易已被修改),交易的副本将被发送给侦听器。
你的问题出在其他地方。如果您向我提供一个在处理器中设置属性但在回调中丢失的情况的最小示例,我会为您提供帮助。