You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Rest API从Oracle向ActiveMQ Classic发送消息时如何添加自定义属性?

问题

已能通过Oracle UTL_HTTP调用Rest API向ActiveMQ Classic发送消息,但不知如何为消息添加自定义属性。我的代码如下:

myMessage := 'some text ....';
req := UTL_HTTP.BEGIN_REQUEST(lc_baseurl, method=>'POST');
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.SET_HEADER(req, 'content-type', 'application/json');
utl_http.set_header(req, 'Content-Length', length(myMessage));
utl_http.set_header(req, 'Authorization', 'Basic ....');
utl_http.set_header(req, 'APPLICATION_SOURCE', 'mySource');
UTL_HTTP.WRITE_TEXT (req, myMessage);
resp := UTL_HTTP.GET_RESPONSE(req);

但我在AMQ Web控制台及JMSToolbox等工具中均无法找到APPLICATION_SOURCE的值,仅能看到AMQ设置的系统头(如jmsmessageID、jmsexpiration等),且消息的"Properties"属性为空。

AMQ控制台消息属性为空

请问如何正确为消息添加自定义属性?

解决方案

你当前通过普通HTTP请求头设置的APPLICATION_SOURCE不会被ActiveMQ Classic映射为JMS消息的自定义属性,因为默认的REST Connector不会自动将非特定前缀的HTTP头转为JMS属性。以下两种方法可以实现需求:

方法一:使用X-JMS-Property-前缀的HTTP请求头

ActiveMQ Classic的REST API支持将以X-JMS-Property-开头的HTTP请求头转换为JMS消息的自定义属性。修改你的代码,将自定义属性头添加前缀:

utl_http.set_header(req, 'X-JMS-Property-APPLICATION_SOURCE', 'mySource');

发送消息后,即可在AMQ控制台或JMSToolbox的消息Properties中查看APPLICATION_SOURCE属性。

方法二:在JSON请求体中嵌入消息属性

如果你的消息采用JSON格式,可以将消息体构造为包含body和properties的结构,把自定义属性放在properties字段内:

  1. 构造带属性的JSON消息体:
DECLARE
  myMessage VARCHAR2(4000);
BEGIN
  myMessage := '{
    "body": "some text ....",
    "properties": {
      "APPLICATION_SOURCE": "mySource"
    }
  }';
  -- 后续请求初始化、设置头、发送的代码保持不变
END;
  1. 发送该JSON作为请求体,ActiveMQ会自动解析properties字段,将其转换为JMS消息的自定义属性。

注意:确保你的ActiveMQ Classic实例已启用REST Connector(默认配置中已包含),且版本支持上述属性设置方式。

内容的提问来源于stack exchange,提问作者Loko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:25:15