You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Camel AMQP组件中获取Solace消息的Content-Type属性?

解决Camel AMQP消费Solace消息时获取HTTP Content-Type属性的问题

原因分析

通过Solace REST API发送消息时,HTTP请求头会被映射为Solace的原生消息属性,其中Content-Type对应属性名为HTTP Content Type,而Camel AMQP组件不会自动将这类自定义属性映射到Camel标准头(如Exchange.CONTENT_TYPE),所以直接调用exchange.getIn().getHeader(Exchange.CONTENT_TYPE)会返回null。

解决方案

1. 直接获取原生属性

直接通过Solace的属性键名获取,注意键名需完全匹配(包括空格和大小写):

String contentType = exchange.getIn().getHeader("HTTP Content Type", String.class);

2. 映射到Camel标准头(推荐)

如果希望统一使用Camel的Exchange.CONTENT_TYPE标准头,可以在路由中添加头映射逻辑,Java DSL示例:

from("amqp:queue:your-solace-queue")
    // 将Solace的HTTP Content Type属性映射到Camel标准头
    .setHeader(Exchange.CONTENT_TYPE, simple("${header.HTTP Content Type}"))
    // 后续业务处理
    .process(exchange -> {
        String contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
        // 使用contentType做消息类型区分
    })
    .to("...");

3. 确认组件属性传递配置

确保Camel AMQP组件没有过滤自定义消息属性,默认情况下组件会传递所有属性,但如果有特殊配置,可在端点URL中显式开启头传递:

amqp:queue:your-solace-queue?transferHeaders=true

调试技巧

如果不确定哪些属性被传递到Camel,可以打印所有入站头进行排查:

exchange.getIn().getHeaders().forEach((key, value) -> {
    System.out.printf("Header: %s = %s%n", key, value);
});

内容的提问来源于stack exchange,提问作者MostafaBakr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:31:30