使用PLSQL的用户定义属性的Oracle JMS消息

时间:2014-12-19 12:12:39

标签: plsql queue jms

我在尝试使用PLSQL将消息排入Single_Consumer QUEUE时遇到问题,我无法在oracle网站上找到任何帮助,也无法在stackoverflow上找到任何帮助。

我已经能够将没有用户定义属性的消息排入队列,但我似乎无法使用用户定义的属性将相同的消息排入队列,这样我就可以使用2个不同的侦听器消息选择器。

我遇到的问题是用户定义的属性应该放在dbms_aq.message_properties_t类型中包含的user_property字段中。

user_property字段是SYS.ANYDATA类型的对象,我需要放一对(键,值)。

我试过这个:

l_obj     t_my_type := t_my_type('tol', 'B');
l_anydata SYS.ANYDATA;

其中t_my_type定义如下:

CREATE OR REPLACE TYPE t_my_type AS OBJECT (
  g_val1 VARCHAR2(20),
  g_val2 VARCHAR2(20)
);

然后我这样做:

l_anydata := SYS.ANYDATA.convertObject(l_obj);
v_message_properties.user_property := l_anydata;

我将此信息排入队列:

dbms_aq.enqueue(queue_name => 'queueName',enqueue_options => enqueue_options,message_properties => v_message_properties,payload => v_mv_payload,msgid => v_msg_id);

问题是:message_properties的字段填充了" void" SYS.ANYDATA因此使侦听器分裂。

有没有人帮我解决这个问题?

我在想的是我在从复杂对象到任何数据的转换对象上做错了...

提前致谢

2 个答案:

答案 0 :(得分:0)

在联系Oracle的支持后,我被告知AQJMS不支持这种实现。 我的需求在接收方使用了主题解决了。

答案 1 :(得分:0)

尝试在dbms_aq.enqueue命令之前添加它:

v_mv_payload.set_string_property('tol','B');