第 11 章 互操作性
本章讨论了如何将 AMQ JMS 与其他 AMQ 组件结合使用。有关 AMQ 组件的兼容性概述,请参阅 产品简介。
11.1. 与其他 AMQP 客户端交互
AMQP 消息 使用 AMQP 类型系统 组成。具有这种通用格式是以不同语言的 AMQP 客户端能够相互互操作的原因之一。本节旨在记录客户端与所使用的各种 JMS 消息类型相关的 AMQP 有效负载和接收的 AMQP 有效负载,以帮助将客户端与其他 AMQP 客户端一起使用。
11.1.1. 发送消息
本节用于记录使用各种 JMS 消息类型时客户端发送的不同有效负载,以帮助其他客户端使用其他客户端接收它们。
11.1.1.1. 消息类型
JMS 消息类型 | 传输的 AMQP 消息的描述 |
---|---|
将使用 amqp-value body 部分发送 TextMessage,其中包含正文文本的 utf8 编码字符串,如果没有设置正文文本,则为 null。带有 符号 键为 "x-opt-jms-msg-type" 的消息注释将设置为 字节 值 5。 | |
将使用包含 BytesMessage 正文中的原始字节 的数据 正文部分发送 BytesMessage,并将 properties 部分 content-type 字段设置为符号值 "application/octet-stream"。http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-symbol带有 符号 键为 "x-opt-jms-msg-type" 的消息注释将设置为 字节 值 3。 | |
MapMessage 正文将使用包含单个 映射 值的 amqp-value body 部分发送。MapMessage 正文中的任何 byte[] 值将编码为映射中 的二进制 条目。带有 符号 键为 "x-opt-jms-msg-type" 的消息注释将设置为 字节 值 2。 | |
StreamMessage 将使用包含 StreamMessage 正文中条目的 amqp-sequence body 部分发送。StreamMessage 正文中的任何 byte[] 条目都会被编码为序列中 的二进制 条目。带有 符号 键为 "x-opt-jms-msg-type" 的消息注释将设置为 字节 值 4。 | |
ObjectMessage 将使用 数据 正文部分发送,其中包含使用 ObjectOutputStream 序列化 ObjectMessage 正文的字节,并将 properties 部分 content-type 字段设置为 符号值 "application/x-java-serialized-object "。http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-symbol带有 符号 键为 "x-opt-jms-msg-type" 的消息注释将设置为 字节 值 1。 | |
普通的 JMS 消息没有正文,并将作为包含 null 的 amqp-value body 部分发送。带有 符号 键为 "x-opt-jms-msg-type" 的消息注解将设置为 字节 值 0。 |
11.1.1.2. 消息属性
JMS 消息支持设置各种 Java 类型的应用程序属性。本节用于显示这些属性类型的映射到发送消息的 application-properties 部分中的 AMQP 类型值。JMS 和 AMQP 将字符串键用于属性名称。
JMS 属性类型 | AMQP 应用属性类型 |
---|---|
布尔值 | |
byte | |
short | |
int | |
long | |
浮点值 | |
double | |
字符串 |
11.1.2. 接收信息
本节旨在记录客户端接收的不同有效负载将映射到不同的 JMS 消息类型,因此要协助使用其他客户端向 JMS 客户端接收消息。
11.1.2.1. 消息类型
如果收到的 AMQP 消息中存在 "x-opt-jms-msg-type" message-annotation,其值用于根据下表中详述的映射来确定用于代表它的 JMS 消息类型。这反映了为 JMS 客户端 发送的消息 讨论的映射的反向流程。
AMQP "x-opt-jms-msg-type" message-annotation value (type) | JMS 消息类型 |
---|---|
0 (字节) | |
1 (字节) | |
2 (字节) | |
3 (byte) | |
4 (字节) | |
5 (字节) |
如果没有 "x-opt-jms-msg-type" message-annotation,下表详细介绍了消息如何映射到 JMS Message 类型。请注意,StreamMessage 和 MapMessage 类型仅被分配给注解的消息。
没有 "x-opt-jms-msg-type" 注解的 Received AMQP 消息描述 | JMS 消息类型 |
---|---|
| |
| |
|
11.1.2.2. 消息属性
本节用于显示收到的 AMQP 消息到 JMS 消息中使用的 Java 类型的 application-properties 部分中的值映射。
AMQP 应用程序属性类型 | JMS 属性类型 |
---|---|
布尔值 | |
byte | |
short | |
int | |
long | |
浮点值 | |
double | |
字符串 | |
字符串 |