POST /messaging/qmgr/{qmgrName}/queue/{queueName}/message
您可以使用 HTTP与 /messaging/qmgr/{qmgrName}/queue/{queueName}/message 资源将消息放入指定的队列管理器上的指定队列中。
将包含 HTTP的 IBM® MQ 消息发送到指定的队列管理器和队列中。 该队列管理器必须位于与 mqweb 服务器相同的机器上。 该方法仅支持基于文本的 HTTP 请求正文。 消息作为 MQSTR 或 JMS TextMessage 格式的消息发送,并使用当前用户上下文进行放置。
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
https://host:port/ibmmq/rest/v3/messaging/qmgr/{qmgrName}/queue/{queueName}/message
- qmgrName
- 指定要连接以进行消息传递的队列管理器的名称。 该队列管理器必须位于与 mqweb 服务器相同的机器上。
- queueName
- 指定要将消息放入的队列的名称。
如果启用 HTTP 连接,您可以使用 HTTP 代替 HTTPS。 有关启用 HTTP 的更多信息,请参阅配置 HTTP 和 HTTPS 端口。
请求头
- 授权
- 如果使用基本认证,那么必须发送此头。 有关更多信息,请参阅将 HTTP 基本认证用于 REST API。
- 内容类型
- 必须使用下列其中一个值来发送此头:
text/plain;charset=utf-8text/html;charset=utf-8text/xml;charset=utf-8application/json;charset=utf-8application/xml;charset=utf-8
- ibm-mq-rest-csrf-token
- 必须设置此头,但值可以是任何内容(包括空白)。
- Accept-Language
- 此头指定响应消息体中返回的任何异常或错误消息的必需语言。
![[REST API v2]](ngrest2.gif)
ibm-mq-md-correlationId- 此头设置所创建消息的相关标识。 头指定为 48 个字符的十六进制编码字符串,表示 24 个字节。 请勿使用
"ID:"作为该值的前缀, REST API 会自动添加该字符串。 ![[MQ 9.3.0 2022 年 6 月]](ng930.gif)
ibm-mq-md-correlationId- 此头设置所创建消息的相关标识。 相关标识可以采用下列其中一种格式:
- 48 个字符的十六进制编码字符串,表示 24 个字节,前缀为字符串
"ID:"。 例如:ibm-mq-md-correlationId: ID:414d5120514d4144455620202020202067d8bf5923582e02 - 特定于应用程序的值。 该值是特定于应用程序的字符串:
ibm-mq-md-correlationId: My-Custom-CorrelId如果指定此形式的相关标识,那么消息目标将作为WMQ_CLIENT_JMS_样子的目标,并因此合并 MQRFH2 头。
- 48 个字符的十六进制编码字符串,表示 24 个字节,前缀为字符串
- ibm-mq-md-到期
- 此头设置所创建消息的到期持续时间。 消息的到期从消息到达队列的时间开始。 因此,将忽略网络等待时间。 必须将头指定为下列其中一个值:
- 无限制
- 消息不会到期。
- 整数值
- 消息到期前的毫秒数。
- ibm-mq-md-持久性
- 此头设置所创建消息的持久性。 将头指定为下列其中一个值:
- nonPersistent
- 此消息无法在系统故障或队列管理器重新启动后继续存在。
- persistent
- 消息在系统故障或队列管理器重新启动后仍然存在。
![[MQ 9.3.0 2022 年 6 月]](ng930.gif)
ibm-mq-消息队列-消息队列优先级- 对于 REST API V3,此头设置所创建消息的优先级。 将头指定为下列其中一个值:
- asDestination
- 此消息使用底层 IBM MQ 队列对象的 DEFPRTY 属性中指定的优先级。
- 整数值
- 将实际优先级指定为 0-9 范围内的整数。
ibm-mq-md-priority: asDestination例如: - ibm-mq-md-replyTo
- 此头设置所创建消息的应答目标。 头的格式使用提供应答队列和可选队列管理器的标准表示法:
replyQueue[@replyQmgr] ![[MQ 9.3.0 2022 年 6 月]](ng930.gif)
ibm-mq-用户- 此头设置请求消息用户定义的属性。
请求主体格式
请求主体必须是文本,并使用 UTF-8 编码。 不需要特定文本结构。 将创建包含请求主体文本的 MQSTR 格式化消息并将其放入指定队列。
![[MQ 9.3.0 2022 年 6 月]](ng930.gif)
如果使用 REST API V3 用户定义的属性或特定于应用程序的相关标识功能,那么将创建包含请求主体文本的 JMS TextMessage 格式化消息并将其放入指定队列。
有关更多信息,请参阅 示例。
安全类的要求
必须向 mqweb 服务器认证调用者。 MQWebAdmin 和 MQWebAdminRO 角色不适用于 messaging REST API。 有关 REST API 的安全性的更多信息,请参阅 IBM MQ Console 和 REST API 安全性。
向 mqweb 服务器认证后,用户可以同时使用 messaging REST API 和 administrative REST API。
- 由资源 URL 的 {queueName} 部分指定的队列必须已启用
PUT。 ![[MQ Appliance]](ngappliance.gif)
对于URL {queueName}指定的队列,必须向调用者的安全主体授予 +PUT权限。
对于URL {queueName}指定的队列,必须向调用者的安全主体授予 UPDATE访问权限。
此安全主体可以是启动 mqweb 服务器的用户,也可以是登录到 mqweb 服务器的用户。 如果您连接到的队列管理器是远程队列管理器,那么安全主体可能是由远程队列管理器连接信息中的凭证提供的用户,也可能是由通道安全规则确定的其他用户。 有关更多信息,请参阅 确定 messaging REST API使用的安全主体。
在 AIX®, Linux®, and Windows上,可以使用 setmqaut 命令向安全主体授予使用 IBM MQ 资源的权限。 有关更多信息,请参阅 setmqaut (授予或撤销权限)。
在 z/OS®上,请参阅 在 z/OS上设置安全性。
如果将 Advanced Message Security (AMS) 与 messaging REST API配合使用,请注意,将使用 mqweb 服务器的上下文 (而不是发布消息的用户的上下文) 对所有消息进行加密。
响应状态码
- 201
- 已成功创建并发送消息。
- 400
- 提供的数据无效。
- 401
- 未认证。
- 403
- 未授权。
- 404
- 队列不存在。
- 405
- 队列已禁止 PUT。
- 415
- 消息头或消息体是不受支持的介质类型。
- 500
- 来自 IBM MQ的服务器问题或错误代码。
- 502
- 当前安全主体无法发送消息,因为消息传递提供程序不支持必需的功能。 例如,如果 mqweb 服务器类路径无效。
- 503
- 队列管理器未运行。
响应头
- 内容-语言
- 指定在发生任何错误或异常时响应消息的语言标识。 与
Accept-Language请求头结合使用,以指示任何错误或异常情况所需的语言。 如果所请求的语言不受支持,那么将使用 mqweb 服务器缺省值。 - 内容长度
- 指定 HTTP的长度,即使没有内容也是如此。 成功时,值为零。
- 内容类型
- 指定响应主体的类型。 成功时,值为
text/plain;charset=utf-8。 如果发生任何错误或异常,那么值为application/json;charset=utf-8。 ![[REST API v2]](ngrest2.gif)
ibm-mq-md-messageId- 指定 IBM MQ 分配给此消息的消息标识。 与
ibm-mq-md-correlationId请求头一样,它表示为 48 个字符的十六进制编码字符串,表示 24 个字节。 ![[MQ 9.3.0 2022 年 6 月]](ng930.gif)
ibm-mq-md-messageId- 指定 IBM MQ 分配给此消息的消息标识。 与
ibm-mq-md-correlationId请求头一样,它表示为 48 个字符的十六进制编码字符串,表示 24 个字节,前缀为字符串ID:。
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!"