我的代码重写了camel routebuilder.configure()来指导jms消息的路由。我试图添加日志行的整个过程的持续时间之前,我到达 .end()
. "{headers['duration']}"
进程启动时指定的历元值。
fromF("%s:queue:%s?concurrentConsumers=%d&maxConcurrentConsumers=%d", incomingJmsComponent, incomingQueueName,
concurrentConsumers, maxConcurrentConsumers)
.routeId(ROUTE_ID)
.bean("injectData") // sets Header objects including list of recipients
.choice()
.when(header(Header.EVENT_TYPE).startsWith("qastudydisplay"))
.to("seda:internal")
.endChoice()
.otherwise()
.multicast() //NOT PARALLEL
.to("seda:internal")
.to("seda:external")
/////////////////////////////////////////////////////////////////////////
// I want to add a log here like:
// .log(LoggingLevel.INFO, System.currentTimeMillis() - "{headers['duration']}"
/////////////////////////////////////////////////////////////////////////
.end()
;
显然,这不起作用,因为 "{headers['duration']}"
是绳子,不长。它在运行时被转换成一些数字。
我解决这个问题的一种方法是创建另一个bean并添加 .bean("logDuration") before
.end()`。但是,我想知道是否可以在不创建另一个bean的情况下实现这一点。当前在我的bean中,它看起来是这样的:
@Component("logMessages")
public class LogMessages {
private static final Logger LOG = LoggerFactory.getLogger(LogMessages.class);
public void logMessages(@Headers Map<String, Object> headers ) {
long start = (long)headers.get("duration");
LOG.debug(String.format(" it took: %d", System.currentTimeMillis() - start));
}
}
如果不创建这个bean,我怎么做呢?
暂无答案!
目前还没有任何答案,快来回答吧!