routebuilder.configure()如何解析spel的头文件

rjee0c15  于 2021-07-15  发布在  Java
关注(0)|答案(0)|浏览(222)

我的代码重写了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,我怎么做呢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题