【发布时间】:2020-05-27 16:11:42
【问题描述】:
我想从 Oracle AQ 队列中取出非持久(=缓冲)JMS 消息。
如果我设置的话,在 PL/SQL 中一切都很好并且可以工作
L_DequeueOptions.VISIBILITY := DBMS_AQ.IMMEDIATE;
L_DequeueOptions.DELIVERY_MODE := DBMS_AQ.BUFFERED;
在 dequeuer 上。
enqueuer 选项相应地设置为 IMMEDIATE 和 BUFFERED。
尽管如此,在 Java 代码中,我尝试使用带有 javax.jms.QueueReceiver 的 JMS 接收消息
QueueReceiver receiver = session.createReceiver(queue, "JMSDeliveryMode = 'PERSISTENT' or JMSDeliveryMode = 'NON_PERSISTENT'");
// and later on:
Message m = receiver.receive(conf.dequeueTimeout);
我没有在出队/接收方的事务中运行。 如何在 JMS 中设置“可见性”? 任何想法为什么我没有收到消息?
我错过了什么?
Payload 是 sys.AQ$_JMS_TEXT_MESSAGE,未压缩等。
顺便说一句:出队应用程序正在使用持久消息...
更新:如果我使用 MessageSelector,该代码也不适用于持久消息。如果没有消息选择器和持久消息,它就可以工作!
【问题讨论】:
标签: java oracle queue jms buffered