28.6. JMS 和 Camel 之间的消息映射
Camel 自动映射 javax.jms.Message 和 org.apache.camel.Message 之间的消息。
发送 JMS 消息时,Camel 会将邮件正文转换为以下 JMS 消息类型:
| 正文类型 | JMS 消息 | 注释 |
|---|---|---|
|
|
| |
|
|
|
DOM 将转换为 |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
|
收到 JMS 消息时,Camel 会将 JMS 消息转换为以下正文类型:
| JMS 消息 | 正文类型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
28.6.1. 禁用 JMS 消息的自动映射 复制链接链接已复制到粘贴板!
您可以使用 mapJmsMessage 选项禁用上面的 auto-mapping。如果禁用,Camel 不会尝试映射收到的 JMS 消息,而是直接将其用作载荷。这可让您避免映射开销,让 Camel 仅通过 JMS 消息。例如,它甚至允许您路由 javax.jms.ObjectMessage JMS 消息,并带有您在 classpath 上不存在的类。
28.6.2. 使用自定义 MessageConverter 复制链接链接已复制到粘贴板!
您可以使用 messageConverter 选项自己在 Spring org.springframework.jms.support.converter.MessageConverter 类中进行映射。
例如,在以下路由中,在向 JMS 顺序队列发送消息时,我们使用自定义消息转换程序:
from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
在从 JMS 目的地消耗时,也可以使用自定义消息转换器。
28.6.3. 控制所选映射策略 复制链接链接已复制到粘贴板!
您可以在端点 URL 上使用 jmsMessageType 选项,以强制所有消息类型。
在以下路由中,我们轮询文件夹中的文件,并将其作为 javax.jms.TextMessage 发送,因为我们强制 JMS producer 端点使用文本消息:
from("file://inbox/order").to("jms:queue:order?jmsMessageType=Text");
from("file://inbox/order").to("jms:queue:order?jmsMessageType=Text");
您还可以通过使用密钥 CamelJmsMessageType 设置标头来指定要用于每个消息的消息类型。例如:
from("file://inbox/order").setHeader("CamelJmsMessageType", JmsMessageType.Text).to("jms:queue:order");
from("file://inbox/order").setHeader("CamelJmsMessageType", JmsMessageType.Text).to("jms:queue:order");
可能的值在 enum 类 org.apache.camel.jms.JmsMessageType 中定义。