WebSphere® 的邮件类型和邮件映射 桥接 HTTP

IBM® MQ bridge for HTTP 支持四个消息类: TEXTBYTESSTREAMMAP。 消息类映射到 JMS 消息类型和 HTTP 内容类型

HTTP POST

到达目的地的消息类型取决于 x-msg-class标头的值或 HTTP 请求的Content-Type表1 显示了与每个 x-msg-class 对应的 HTTP 内容类型。 可以使用任一字段来设置消息类型和消息格式。 如果设置了这两个字段,并且设置不一致,那么将返回 Bad Request exception ( HTTP 400, MQHTTP20004)。

表 1. 在x-msg-class 和 HTTP Content-Type 之间建立映射
x-msg-class HTTP 内容类型
BYTES
application/octet-stream
application/xml
TEXT
text/*

MAP
application/x-www-form-urlencoded
application/xml (可选)
STREAM
application/xml (可选)

如果在 MQRFH2 头中设置了 JMS 消息类型,那么将根据 表 2对其进行映射。

表 2. x-msg-classJMS 消息类型之间的映射。
x-msg-class JMS 消息类型
BYTES jms_bytes
TEXT jms_text
MAP jms_map
STREAM jms_stream

始终为消息类 MAPSTREAM设置 JMS 消息类型。 并非总是为消息类 BYTESTEXT设置此值。 如果要为请求创建 MQRFH2 ,那么将始终设置 JMS 消息类型。 否则,如果未创建 MQRFH2 ,那么不会设置 JMS 消息类型。 如果在请求中使用 x-msg-usr 头设置了用户属性,那么将创建 MQRFH2

如果设置了 JMS 消息类型,那么消息格式将设置为 MQFMT_NONE,请参阅 表 4:

表 3. x-msg-classIBM MQ 消息格式之间的映射
x-msg-class 消息中存在 MQRFH2 的消息格式 消息中不存在 no MQRFH2 的消息格式
BYTES MQFMT_NONE MQFMT_NONE
TEXT MQFMT_NONE MQFMT_STRING
MAP MQFMT_NONE 不可用
STREAM MQFMT_NONE 不可用

HTTP GET 或者 DELETE

所检索的信息类型或格式决定了 x-msg-class标头和 HTTP 响应的Content-Type 的值。 仅当在 x-msg-headers 请求中请求时,才会返回 x-msg-class 头。

表 4 描述了 x-msg-classContent-Type之间的映射以及从队列或主题中检索的消息类型。

表 4. 将消息类型映射到 x-msg-classContent-Type
消息格式 JMS 消息类型 x-msg-class 内容类型
MQFMT_STRING 以外的任何内容 None BYTES application/octet-stream
MQFMT_STRING None TEXT text/plain
MQFMT_NONE jms_bytes BYTES application/octet-stream
MQFMT_NONE jms_text TEXT text/plain
MQFMT_NONE jms_map MAP application/xml
MQFMT_NONE jms_stream STREAM application/xml

MAPSTREAM 消息类序列化

MAP 和 消息类以序列化的方式返回给客户端,就像消息被序列化到队列中一样,以 响应的形式返回。 STREAM HTTP

对于 MAP, XML 名称,类型和值三元组将编码为:
<map>
	<elt name="elementname1" dt="datatype1">value1</elt>
	<elt name="elementname2" dt="datatype2">value2</elt>
	...
</map>
STREAM 类似于 MAP,但它没有元素名称:
<stream>
	<elt dt="datatype1">value1</elt>
	<elt dt="datatype2">value2</elt>
	...
</stream>
注: datatype 是为定义用户自定义属性而定义的数据类型之一,列在 usr: HTTP x-msg-usr实体头中。 对于字符串元素,将省略属性 dt=string ,因为缺省数据类型为 string