Apache Camel:如何在HTTP URI中动态设置标头值



我正在学习骆驼并创建了一条路线,如下所示:

from("timer:stream?period={{inbound.timer.period}}")
      ...
      .setHeader(Exchange.HTTP_URI, simple(outboundUri()))
      ...
      .multicast()
      .to(
              "stream:header",
              "file://build?autoCreate=false",
              outboundHttp
      );

outboundUri() 方法返回路径中带有占位符的 URI,${header.CamelFileName} 。我想做的是使用某种标头映射器解决此问题,我可以在其中按优先级顺序查看一些标头,如果没有,则为 CamelFileName 设置默认值。

如何使用HTTP4组件实现此目的?

我最终实现了一个处理器,如下所示:

public class FilenameHeaderMessageProcessor implements org.apache.camel.Processor {
    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd-kkmm");
    @Override
    public void process(Exchange exchange) throws Exception {
        Message in = exchange.getIn();
        Map<String, Object> inHeaders = in.getHeaders();
        log.debug("In headers: {}.", inHeaders);
        Message out = exchange.getOut();
        // Without this, out body is null
        out.setBody(in.getBody());
        Object filename = inHeaders.computeIfAbsent(FILE_NAME,
                k -> Optional.ofNullable(inHeaders.get(KEY))
                        .orElse(defaultFilename())
        );
        out.setHeader(FILE_NAME, filename);
    }
    private final String defaultFilename() {
        return DATE_TIME_FORMATTER.format(LocalDateTime.now()) + ".out";
    }
}

最新更新