如何在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
相关产品推荐
相关产品推荐

