Dequeue mensaje no persistente de AQ Queue usando JMS

Me gustaría eliminar un mensaje JMS no persistente (= protegido) de una cola Oracle AQ.

En PL / SQL todo está bien y funciona, si configuro

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

en el vencedor.

Las opciones del enqueuer se configuran en INMEDIATO y BUFFERED.

Sin embargo, en Java Code trato de recibir el mensaje usando JMS con javax.jms.QueueReceiver usando

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

No estoy ejecutando una transacción en el lado del vencedor / receptor. ¿Cómo puedo configurar la "visibilidad" en JMS? ¿Alguna idea de por qué no recibo los mensajes?

¿Qué me estoy perdiendo?

La carga útil es sys.AQ $ _JMS_TEXT_MESSAGE, no comprimido o similar.

por cierto: la aplicación de eliminación de colas funciona con mensajes persistentes ...

Actualizar: el código no funciona para mensajes persistentes también, si uso el MessageSelector. Sin selector de mensajes y mensajes persistentes, ¡funciona!

Respuesta 1

Descubrimos cómo manejar esto. Directamente en JMS no hay forma de eliminar los mensajes no persistentes. Dudo que la extracción no persistente sea parte del estándar.

La única forma es lanzar el QueueReceiver a un oracle.jms.AQjmsConsumery luego llamar

      receiver.bufferReceive(timeout);

en lugar de

      receiver.receive(timeout);

Solo la depuración en el código Oracle JMS nos trajo a esta solución. Hay poca documentación sobre esto en la web.

Por cierto: el selector de mensajes me llevó en la dirección completamente equivocada.

Respuesta: 2

Necesito programar una clase principal (Placa) y algunas clases secundarias (Placa de madera, Placa de porcelana, etc.) cada uno de los Objetos secundarios debe tener un número de serie que comience con 1, luego 2, etc. ¿Dónde debería ...

Tengo Openjdk 12.0.2 jmeter 4.0 Windows 10 Cuando intento iniciar Jmeter usando "jmeter.bat" aparece el siguiente mensaje de error: Se produjo un error durante la inicialización de la capa de arranque ...

Hola, tengo un archivo json con datos como este [{"empleado": {"nombre": "Rudi", "apellido": "Anton"}}, {"empleado": {"nombre": "Syafira", "...

Ahora obtengo el valor de la fecha y hora de JSON como "end_datetime": "2020-12-31 20:08:00" pero quiero convertir el año de 2020> 2563 cuando obtengo valor en Textview. lo siento, no soy bueno en inglés.