¿Hay alguna API para eliminar un mensaje de la cola JMS sin utilizar la herramienta de administración de supervisión?Cómo eliminar un mensaje de la cola JMS
Respuesta
Un objeto QueueBrowser puede ser lo que necesita. Creo que tiene un método de eliminación (o similar)
No hay API directa para eliminar el mensaje. Puede llamar al método queueReceiver.receive() para eliminar un mensaje de una cola. QueueBrowser no eliminará los mensajes de la cola.
No podemos prescindir del método Receiver.receive() ... – avikodak
Aquí es algo que podría llegar al trabajo:
estoy asumiendo que usted desea borrar un mensaje que coincida con un criterio particular.
Queue destination = session.createQueue("your_q");
QueueBrowser browser = session.createBrowser(destination);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements())
{
TextMessage msg = (TextMessage)enum1.nextElement();
if(msg.getStringProperty("any_prop").equals("some_prop"))
{
MessageConsumer consumer = session.createConsumer(destination, "id='" + msg.getStringProperty("id") + "'");
consumer.receive(1000);
}
}
Esto es algo que en realidad he probado con éxito en WebLogic:
destinationJNDI debe contener el nombre JNDI de la cola, como "[email protected]_Notifications.NLNotificationReprocessQ".
CTX debe ser un InitialContext válidos como:
Properties env = new Properties();
env.put(javax.naming.Context.PROVIDER_URL, PROVIDER_URL);
env.put(Context.SECURITY_PRINCIPAL, WL_USER);
env.put(Context.SECURITY_CREDENTIALS, WL_PASSWORD);
env.put(Context.INITIAL_CONTEXT_FACTORY, WL_INITIAL_CONTEXT_FACTORY);
InitialContext ctx = new InitialContext(env);
idlist debe ser una lista CSV de identificadores de mensaje que desea eliminar
este es el código:
javax.jms.Queue queue = (javax.jms.Queue) ctx.lookup(destinationJNDI.toString());
// lookup the queue connection factory
QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) ctx.lookup(WEBLOGIC_JMS_XA_CONNECTION_FACTORY);
// create a queue connection
QueueConnection queueConn = queueConnFactory.createQueueConnection();
queueConn.start();
// create a queue session
Session queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
for (String id : idlist.split(",")) {
if (id.startsWith("ID:")) {
MessageConsumer consumer = queueSession.createConsumer(queue, " JMSMessageID='" + id + "'");
Message message = consumer.receive(1000);
out.write("message = " + message + " ");
out.write("deleted ID " + id + " ");
}
}
queueSession.close();
queueConn.close();
I tuvo que llamar adicionalmente al session.commit()
para que el consumidor elimine los mensajes.
Además, la API receivenowait
no funciona; llame al receive(1000)
en su lugar.
Aquí es una pieza de trabajo de código que he escrito que trabajé en jboss
:
try {
connection = connectionFactory.createConnection();
session = connection.createSession(true,-1);
Queue queue = (Queue) QueueConnectionFactory.getInitialContext().lookup("/queue/DLQ");
QueueBrowser browser = session.createBrowser(queue);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements()) {
TextMessage msg = (TextMessage)enum1.nextElement();
MessageConsumer consumer = session.createConsumer(queue, "JMSMessageID='" + msg.getJMSMessageID() + "'");
//You can try starting the connection outside while loop as well, I think I started it inside while loop by mistake, but since this code worked I am hence letting you know what worked
connection.start();
Message message = consumer.receive(1000) ;
if (message != null) {
//do something with message
}
}
}
finally {
session.commit();
consumer.close();
browser.close();
session.close();
connection.close();
}
- 1. Reemplazar un mensaje en una cola jms
- 2. Cómo purgar/eliminar mensajes de la cola weblogic JMS
- 3. Cómo dibujar la cola JMS?
- 4. La cola JMS está llena
- 5. Tamaño de mensaje JMS
- 6. ¿Cómo retraso la entrega de un mensaje JMS usando HornetQ?
- 7. Retardo de retransmisión de mensaje JMS
- 8. Posibles trampas al usar una cola JMS?
- 9. La prioridad del mensaje JMS no funciona en el mensaje
- 10. Agregar una cola JMS a Jboss 7
- 11. Filtrado del receptor de mensaje JMS por JMSCorrelationID
- 12. Recuperar Número de mensaje JMS reintentar
- 13. Mensaje de JMS MessageConsumerListener hace push o pull?
- 14. Especificación de persistencia de mensaje para el cliente JMS
- 15. Copiar las propiedades del mensaje JMS
- 16. Cómo usar la Transformación de mensaje JMS en ActiveMQ con Stomp/JSON
- 17. Mover el mensaje de la cola de la carta muerta a la cola de salida MSMQ
- 18. Activador de SQL Server - Enviar mensaje a la cola
- 19. ¿Herramienta para publicar mensajes de prueba en una cola JMS?
- 20. JMS: ¿Cómo funcionan los selectores de mensajes con múltiples consumidores de cola y tema?
- 21. Contenedor de escucha de mensaje JMS de primavera
- 22. Procesamiento JMS efectivo
- 23. ¿Cómo solicitar el despliegue de los EJB y la configuración de cola JMS en JBoss 5?
- 24. ¿Cómo inicializar ConnectionFactory para la cola JMS remota cuando la máquina remota no se está ejecutando?
- 25. Implementación de mensajería JMS
- 26. Cómo limitar el número de instancias de los BMD escuchando a una cola JMS Jboss
- 27. ¿Cómo puedo eliminar trabajos específicos de la cola Resque sin borrar toda la cola?
- 28. ¿Cómo puedo usar un adaptador JMS para escuchar Amazon SQS
- 29. Oracle: procedimiento almacenado Java que envía mensaje JMS
- 30. ¿Hay alguna forma de obtener la dirección IP de origen de un mensaje JMS?
Creo que no es un método de eliminación en el QueueBrowser por lo que lee de la documentación de Java ... cola Browser es solamente usado para leer la cola – avikodak
Tiene razón, pero recuerdo haber usado un QueueBrowser en este contenido. Si mal no recuerdo recibí la enumeración de los mensajes en la cola, repetí sobre eso, y consumí el mensaje que me interesaba (y no hice nada con él) – DaveH
Ok lo revisaré ... pero tengo un pequeña duda podemos cambiar los encabezados del mensaje cuando están en cola ... para que pueda cambiar la propiedad "time_to_live" – avikodak