47.7. JMS 和 Camel 之间的消息映射
Camel 会在 javax.jms.Message
和 org.apache.camel.Message
之间自动映射消息。
在发送 JMS 消息时,Camel 会将消息正文转换为以下 JMS 消息类型:
正文类型 | JMS 消息 | 注释 |
---|---|---|
|
| |
|
|
DOM 将转换为 |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
在收到 JMS 消息时,Camel 会将 JMS 消息转换为以下正文类型:
JMS 消息 | 正文类型 |
---|---|
|
|
|
|
|
|
|
|
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");
from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
从 JMS 目的地消耗时,也可以使用自定义消息转换器。
47.7.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
中定义。