POST /messaging/qmgr/{qmgrName}/queue/{queueName}/message

您可以使用 HTTP与 /messaging/qmgr/{qmgrName}/queue/{queueName}/message 资源将消息放入指定的队列管理器上的指定队列中。

将包含 HTTP的 IBM® MQ 消息发送到指定的队列管理器和队列中。 该队列管理器必须位于与 mqweb 服务器相同的机器上。 该方法仅支持基于文本的 HTTP 请求正文。 消息作为 MQSTRJMS TextMessage 格式的消息发送,并使用当前用户上下文进行放置。

[MQ 9.3.0 2022 年 6 月]REST API V3 添加了指定用户定义的消息属性和包含消息优先级的功能。 ibm-mq-md-priority 和 ibm-mq-usr 请求头仅可用于 REST API V3。 在 REST APIV3 中,ibm-mq-ibm-mq-md-correlationId-correlationId 请求标头的格式有所不同。 头可以是特定于应用程序的标识,如果是编码字符串,那么需要 ID: 前缀。 如果 POST 请求包含用户定义的消息或特定于应用程序的相关标识,那么该消息将格式化为 JMS TextMessage

资源 URL

https://host:port/ibmmq/rest/v1/messaging/qmgr/{qmgrName}/queue/{queueName}/message

https://host:port/ibmmq/rest/v2/messaging/qmgr/{qmgrName}/queue/{queueName}/message

[MQ 9.3.0 Jun 2022]https://host:port/ibmmq/rest/v3/messaging/qmgr/{qmgrName}/queue/{queueName}/message

qmgrName
指定要连接以进行消息传递的队列管理器的名称。 该队列管理器必须位于与 mqweb 服务器相同的机器上。
[MQ 9.3.3 2023 年 6 月]IBM MQ 9.3.3开始,可以连接到本地队列管理器或远程队列管理器。 您为 qmgrName 指定的名称取决于 mqweb 服务器的配置方式:
  • 如果 mqweb 服务器配置为仅连接到本地队列管理器,请使用队列管理器的名称。
  • 如果 mqweb 服务器配置为连接远程队列管理器,请使用远程队列管理器连接信息中指定的队列管理器的唯一名称。
您可以使用 dspmqweb properties 命令并查看 mqRestMessagingConnectionMode 属性来确定是将 mqweb 服务器配置为连接到本地队列管理器还是远程队列管理器。
队列管理器名称区分大小写。
如果队列管理器名称包含正斜杠、句点或百分号,那么这些字符必须进行 URL 编码:
  • 必须将正斜杠编码为 %2F
  • 必须将句点编码为 %2E
  • 必须将百分号编码为 %25
queueName
指定要将消息放入的队列的名称。
该队列必须定义为本地,远程或指定队列管理器的别名-它还可以引用集群队列。
队列名称区分大小写。
如果队列名称包含斜杠或百分号,则必须对其URL :
  • 正斜杠 / 必须编码为 %2F
  • 百分号 % 必须编码为 %25

如果启用 HTTP 连接,您可以使用 HTTP 代替 HTTPS。 有关启用 HTTP 的更多信息,请参阅配置 HTTP 和 HTTPS 端口

请求头

必须随请求一起发送以下头:
授权
如果使用基本认证,那么必须发送此头。 有关更多信息,请参阅将 HTTP 基本认证用于 REST API
内容类型
必须使用下列其中一个值来发送此头:
  • text/plain;charset=utf-8
  • text/html;charset=utf-8
  • text/xml;charset=utf-8
  • application/json;charset=utf-8
  • application/xml;charset=utf-8
ibm-mq-rest-csrf-token
必须设置此头,但值可以是任何内容(包括空白)。
可以选择随请求一起发送以下头:
Accept-Language
此头指定响应消息体中返回的任何异常或错误消息的必需语言。
[REST API v2][REST API v1]ibm-mq-md-correlationId
此头设置所创建消息的相关标识。 头指定为 48 个字符的十六进制编码字符串,表示 24 个字节。 请勿使用 "ID:"作为该值的前缀, REST API 会自动添加该字符串。
ibm-mq-md-correlationId: 414d5120514d4144455620202020202067d8bf5923582e02例如:
[MQ 9.3.0 2022 年 6 月][REST API v3]ibm-mq-md-correlationId
此头设置所创建消息的相关标识。 相关标识可以采用下列其中一种格式:
  • 48 个字符的十六进制编码字符串,表示 24 个字节,前缀为字符串 "ID:"。 例如: ibm-mq-md-correlationId: ID:414d5120514d4144455620202020202067d8bf5923582e02
  • 特定于应用程序的值。 该值是特定于应用程序的字符串: ibm-mq-md-correlationId: My-Custom-CorrelId

    如果指定此形式的相关标识,那么消息目标将作为WMQ_CLIENT_JMS_样子的目标,并因此合并 MQRFH2 头。

ibm-mq-md-到期
此头设置所创建消息的到期持续时间。 消息的到期从消息到达队列的时间开始。 因此,将忽略网络等待时间。 必须将头指定为下列其中一个值:
无限制
消息不会到期。
该值为缺省值。
整数值
消息到期前的毫秒数。
限制为范围 0-99999999900。
ibm-mq-md-持久性
此头设置所创建消息的持久性。 将头指定为下列其中一个值:
nonPersistent
此消息无法在系统故障或队列管理器重新启动后继续存在。
该值为缺省值。
persistent
消息在系统故障或队列管理器重新启动后仍然存在。
[MQ 9.3.0 2022 年 6 月][REST API v3]ibm-mq-消息队列-消息队列优先级
对于 REST API V3,此头设置所创建消息的优先级。 将头指定为下列其中一个值:
asDestination
此消息使用底层 IBM MQ 队列对象的 DEFPRTY 属性中指定的优先级。
该值为缺省值。
整数值
将实际优先级指定为 0-9 范围内的整数。
ibm-mq-md-priority: asDestination例如:
对于 REST API V1 和 REST API V2, POST 的消息优先级始终为 4。
ibm-mq-md-replyTo
此头设置所创建消息的应答目标。 头的格式使用提供应答队列和可选队列管理器的标准表示法: replyQueue[@replyQmgr]
ibm-mq-md-replyTo: myReplyQueue@myReplyQMgr例如:
[MQ 9.3.0 2022 年 6 月][REST API v3]ibm-mq-用户
此头设置请求消息用户定义的属性。
这些属性具有以下语法:

ibm-mq-usr: property_name; user_value; user_type

property_name
要指定的用户属性的名称。 这必须是有效的 JMS 属性名。
用户值
属性的值。
用户类型
属性的类型:
  • boolean (true/false , MQBOOL)
  • byte (8 位整数, MQINT8)
  • short (16 位整数, MQINT16)
  • integer (32 位整数, MQINT32)
  • long (64 位整数, MQINT64)
  • float (32 位实数, MQFLOAT32)
  • double (64 位实数, MQFLOAT64)
  • string (带引号的字符串)
您可以在一条消息上设置多个属性。 您可以在单个 ibm-mq-usr 请求头中指定多个以逗号分隔的属性,也可以使用 ibm-mq-usr 请求头的两个或更多单独实例。
例如,可以在单个头中设置多个用户定义的属性: ibm-mq-usr: userPropertyA;5;byte,userPropertyB;-10;integer
或者,可以在头的不同实例中设置多个用户定义的属性:ibm-mq-usr: userPropertyA;5;byte ibm-mq-usr: userPropertyB;-10;integer

请求主体格式

请求主体必须是文本,并使用 UTF-8 编码。 不需要特定文本结构。 将创建包含请求主体文本的 MQSTR 格式化消息并将其放入指定队列。

[MQ 9.3.0 2022 年 6 月][REST API v3]如果使用 REST API V3 用户定义的属性或特定于应用程序的相关标识功能,那么将创建包含请求主体文本的 JMS TextMessage 格式化消息并将其放入指定队列。

有关更多信息,请参阅 示例

安全类的要求

必须向 mqweb 服务器认证调用者。 MQWebAdminMQWebAdminRO 角色不适用于 messaging REST API。 有关 REST API 的安全性的更多信息,请参阅 IBM MQ ConsoleREST API 安全性

向 mqweb 服务器认证后,用户可以同时使用 messaging REST APIadministrative REST API

必须授予调用者的安全主体将消息放入指定队列的能力:
  • 由资源 URL 的 {queueName} 部分指定的队列必须已启用 PUT
  • [MQ Appliance][AIX、Linux 和 Windows] 对于URL {queueName}指定的队列,必须向调用者的安全主体授予 +PUT 权限。
  • [z/OS]对于URL {queueName}指定的队列,必须向调用者的安全主体授予 UPDATE 访问权限。

此安全主体可以是启动 mqweb 服务器的用户,也可以是登录到 mqweb 服务器的用户。 如果您连接到的队列管理器是远程队列管理器,那么安全主体可能是由远程队列管理器连接信息中的凭证提供的用户,也可能是由通道安全规则确定的其他用户。 有关更多信息,请参阅 确定 messaging REST API使用的安全主体

[AIX、Linux 和 Windows]AIX®, Linux®, and Windows上,可以使用 setmqaut 命令向安全主体授予使用 IBM MQ 资源的权限。 有关更多信息,请参阅 setmqaut (授予或撤销权限)

[z/OS]z/OS®上,请参阅 z/OS上设置安全性

如果将 Advanced Message Security (AMS) 与 messaging REST API配合使用,请注意,将使用 mqweb 服务器的上下文 (而不是发布消息的用户的上下文) 对所有消息进行加密。

响应状态码

201
已成功创建并发送消息。
400
提供的数据无效。
例如,指定了无效的请求头值。
401
未认证。
调用者必须向 mqweb 服务器进行认证,并且必须属于 MQWebAdminMQWebAdminROMQWebUser 角色中的一个或多个角色。 还必须指定 ibm-mq-rest-csrf-token 头。 有关更多信息,请参阅 安全性需求
403
未授权。
调用者已向 mqweb 服务器进行认证,并且与有效主体相关联。 但是,主体不具有对所有 IBM MQ 资源或所需资源的子集的访问权,或者不具有 MQWebUser 角色。 有关所需访问权的更多信息,请参阅 安全性需求
404
队列不存在。
405
队列已禁止 PUT。
415
消息头或消息体是不受支持的介质类型。
例如, Content-Type 头设置为不受支持的介质类型。
500
来自 IBM MQ的服务器问题或错误代码。
502
当前安全主体无法发送消息,因为消息传递提供程序不支持必需的功能。 例如,如果 mqweb 服务器类路径无效。
503
队列管理器未运行。

响应头

以下头随响应一起返回:
内容-语言
指定在发生任何错误或异常时响应消息的语言标识。 与 Accept-Language 请求头结合使用,以指示任何错误或异常情况所需的语言。 如果所请求的语言不受支持,那么将使用 mqweb 服务器缺省值。
内容长度
指定 HTTP的长度,即使没有内容也是如此。 成功时,值为零。
内容类型
指定响应主体的类型。 成功时,值为 text/plain;charset=utf-8。 如果发生任何错误或异常,那么值为 application/json;charset=utf-8
[REST API v2][REST API v1]ibm-mq-md-messageId
指定 IBM MQ 分配给此消息的消息标识。 与 ibm-mq-md-correlationId 请求头一样,它表示为 48 个字符的十六进制编码字符串,表示 24 个字节。
例如:
ibm-mq-md-messageId: 414d5120514d4144455620202020202067d8ce5923582f07
[MQ 9.3.0 2022 年 6 月][REST API v3]ibm-mq-md-messageId
指定 IBM MQ 分配给此消息的消息标识。 与 ibm-mq-md-correlationId 请求头一样,它表示为 48 个字符的十六进制编码字符串,表示 24 个字节,前缀为字符串 ID:
例如:
ibm-mq-md-messageId: ID:414d5120514d4144455620202020202067d8ce5923582f07
[MQ 9.3.3 2023 年 6 月]ibm-mq-已解析-qmgr
指定用于请求的队列管理器的名称。 如果URL 中使用了唯一名称,则此标头将标识与该唯一名称关联的队列管理器的名称。 如果URL 中使用的唯一名称是指队列管理器组,则此标头将标识组中使用的队列管理器。

响应主体格式

如果成功发送消息,那么响应主体为空。 如果发生错误,那么响应主体包含错误消息。 有关更多信息,请参阅 REST API 错误处理

示例

以下示例使用 v2 资源 URL。 如果正在使用的 IBM MQ 版本低于 IBM MQ 9.1.5,那么必须改为使用 v1 资源 URL。 即,在资源 URL 中替换 v1,其中示例 URL 使用 v2

以下示例使用密码 mquser登录名为 mquser 的用户。 在 "cURL,中,登录请求可能与下面的 "Windows示例相似。 LTPA 令牌通过使用 -c 标志存储在 cookiejar.txt 文件中:
curl -k "https://localhost:9443/ibmmq/rest/v2/login" -X POST 
-H "Content-Type: application/json" --data "{\"username\":\"mquser\",\"password\":\"mquser\"}" 
-c c:\cookiejar.txt

用户登录后,LTPA令牌和 ibm-mq-rest-csrf-token HTTP 标头用于进一步请求的认证。 ibm-mq-rest-csrf-token token_value 可以是任何值,包括空白。

  • 以下 Windows cURL 示例使用缺省选项将消息发送到队列管理器 QM1上的队列 Q1 。 此消息包含文本 "Hello World!":
    curl -k "https://localhost:9443/ibmmq/rest/v2/messaging/qmgr/QM1/queue/Q1/message" 
    -X POST -b c:\cookiejar.txt -H "ibm-mq-rest-csrf-token: token_value" 
    -H "Content-Type: text/plain;charset=utf-8" --data "Hello World!"
  • 以下 Windows cURL 示例将持久消息发送到队列管理器 QM1上的队列 Q1 ,到期时间为 2 分钟。 此消息包含文本 "Hello World!":
    curl -k "https://localhost:9443/ibmmq/rest/v2/messaging/qmgr/QM1/queue/Q1/message" 
    -X POST -b c:\cookiejar.txt -H "ibm-mq-rest-csrf-token: token_value" 
    -H "Content-Type: text/plain;charset=utf-8" -H "ibm-mq-md-persistence: persistent" 
    -H "ibm-mq-md-expiry: 120000" --data "Hello World!"
  • 以下 Windows cURL 示例将非持久消息发送到队列管理器 QM1上的队列 Q1 ,并且没有到期和定义的相关标识。 此消息包含文本 "Hello World!":
    curl -k "https://localhost:9443/ibmmq/rest/v2/messaging/qmgr/QM1/queue/Q1/message" 
    -X POST -b c:\cookiejar.txt -H "ibm-mq-rest-csrf-token: token-value" 
    -H "Content-Type: text/plain;charset=utf-8" -H "ibm-mq-md-persistence: nonPersistent" 
    -H "ibm-mq-md-expiry: unlimited" -H "ibm-mq-md-correlationId: 414d5120514d4144455620202020202067d8b
    f5923582e02" --data "Hello World!"