使用JMS从AQ队列中出队非持久消息

问题描述 投票:1回答:2

我想从Oracle AQ队列中取出非持久性(=缓冲的)JMS消息。

在PL / SQL中,一切正常,如果我设置的话,可以工作

L_DequeueOptions.VISIBILITY    := DBMS_AQ.IMMEDIATE;
L_DequeueOptions.DELIVERY_MODE := DBMS_AQ.BUFFERED;

出队。

enqueuer选项被相应地设置为IMMEDIATE和BUFFERED。

尽管如此,在Java代码中,我还是尝试通过JMS和javax.jms.QueueReceiver一起使用来接收消息,>

QueueReceiver receiver = session.createReceiver(queue, "JMSDeliveryMode = 'PERSISTENT' or JMSDeliveryMode = 'NON_PERSISTENT'");
// and later on:
Message m = receiver.receive(conf.dequeueTimeout);

我不在出队方/接收方的事务中运行。如何在JMS中设置“可见性”?为什么我没有收到消息的任何想法?

我想念什么?

有效负载为sys.AQ $ _JMS_TEXT_MESSAGE,未压缩等。

btw:出队应用程序正在使用持久消息运行...

更新:

如果我使用MessageSelector,该代码也不适用于持久消息。如果没有消息选择器和持久消息,它将起作用!

我想从Oracle AQ队列中取出非持久性(=缓冲的)JMS消息。如果我设置L_DequeueOptions.VISIBILITY:= DBMS_AQ.IMMEDIATE;在PL / SQL中一切正常,并且可以正常工作。 ...

java oracle queue jms buffered
2个回答
1
投票

我们发现了如何进行管理。直接在JMS上,无法使非持久消息出队。我怀疑非持久出队是否是标准的一部分。


1
投票

JMS规范(JSR 914)定义了两种交付模式:PERSISTENTNON_PERSISTENT。对于Oracle,这些模式为PERSISTENTBUFFERED

© www.soinside.com 2019 - 2024. All rights reserved.