我想从 Oracle AQ 队列中取出非持久性(=缓冲的)JMS 消息。
如果我设置,在 PL/SQL 中一切都很好并且可以工作
L_DequeueOptions.VISIBILITY := DBMS_AQ.IMMEDIATE;
L_DequeueOptions.DELIVERY_MODE := DBMS_AQ.BUFFERED;
在出队。
入队选项相应地设置为 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,该代码也不适用于持久消息。如果没有消息选择器和持久消息,它就可以工作!