47.7. JMS 和 Camel 之间的消息映射


Camel 会在 javax.jms.Messageorg.apache.camel.Message 之间自动映射消息。

在发送 JMS 消息时,Camel 会将消息正文转换为以下 JMS 消息类型:

Expand
正文类型JMS 消息注释

字符串

javax.jms.TextMessage

 

org.w3c.dom.Node

javax.jms.TextMessage

DOM 将转换为 String

Map

javax.jms.MapMessage

 

java.io.Serializable

javax.jms.ObjectMessage

 

byte[]

javax.jms.BytesMessage

 

java.io.File

javax.jms.BytesMessage

 

java.io.Reader

javax.jms.BytesMessage

 

java.io.InputStream

javax.jms.BytesMessage

 

java.nio.ByteBuffer

javax.jms.BytesMessage

 

在收到 JMS 消息时,Camel 会将 JMS 消息转换为以下正文类型:

Expand
JMS 消息正文类型

javax.jms.TextMessage

字符串

javax.jms.BytesMessage

byte[]

javax.jms.MapMessage

Map<String, Object>

javax.jms.ObjectMessage

对象

47.7.1. 禁用 JMS 消息的自动映射

您可以使用 mapJmsMessage 选项禁用上述自动映射。如果禁用,Camel 不会尝试映射收到的 JMS 消息,而是直接使用它作为有效负载。这可让您避免映射开销,并让 Camel 只需通过 JMS 消息。例如,它甚至允许您路由带有使用了没有包括在 classpath 中的类的 javax.jms.ObjectMessage JMS 消息。

47.7.2. 使用自定义 MessageConverter

您可以使用 messageConverter 选项在 Spring org.springframework.jms.support.converter.MessageConverter 类中执行自己的映射。

例如,在下面的路由中,我们在发送消息到 JMS 顺序队列时使用自定义消息转换器:

from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
Copy to Clipboard Toggle word wrap

从 JMS 目的地消耗时,也可以使用自定义消息转换器。

47.7.3. 控制所选的映射策略

您可以使用端点 URL 上的 jmsMessageType 选项为所有消息强制使用特定的消息类型。

在以下路由中,我们从文件夹轮询文件并将其作为 javax.jms.TextMessage 发送,因为我们强制 JMS producer 端点使用文本消息:

from("file://inbox/order").to("jms:queue:order?jmsMessageType=Text");
Copy to Clipboard Toggle word wrap

您还可以通过使用键 CamelJmsMessageType 设置标头来指定每个消息使用的消息类型。例如:

from("file://inbox/order").setHeader("CamelJmsMessageType", JmsMessageType.Text).to("jms:queue:order");
Copy to Clipboard Toggle word wrap

可能的值在 enumorg.apache.camel.jms.JmsMessageType 中定义。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat