¿Hay alguna manera (aparte de consumir el mensaje) de que puedo purgar/eliminar el mensaje mediante programación de la cola JMS? Incluso si es posible con la herramienta de línea de comandos wlst, será de mucha ayuda.Cómo purgar/eliminar mensajes de la cola weblogic JMS
Respuesta
Puede usar JMX para purgar la cola, ya sea desde Java o desde WLST (Python). Puede encontrar las definiciones de MBean para WLS 10.0 en http://download.oracle.com/docs/cd/E11035_01/wls100/wlsmbeanref/core/index.html. Aquí es un ejemplo básico de Java (no se olvide de poner weblogic.jar en el CLASSPATH):
import java.util.Hashtable;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.ObjectName;
import javax.naming.Context;
import weblogic.management.mbeanservers.runtime.RuntimeServiceMBean;
public class PurgeWLSQueue {
private static final String WLS_USERNAME = "weblogic";
private static final String WLS_PASSWORD = "weblogic";
private static final String WLS_HOST = "localhost";
private static final int WLS_PORT = 7001;
private static final String JMS_SERVER = "wlsbJMSServer";
private static final String JMS_DESTINATION = "test.q";
private static JMXConnector getMBeanServerConnector(String jndiName) throws Exception {
Hashtable<String,String> h = new Hashtable<String,String>();
JMXServiceURL serviceURL = new JMXServiceURL("t3", WLS_HOST, WLS_PORT, jndiName);
h.put(Context.SECURITY_PRINCIPAL, WLS_USERNAME);
h.put(Context.SECURITY_CREDENTIALS, WLS_PASSWORD);
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, h);
return connector;
}
public static void main(String[] args) {
try {
JMXConnector connector =
getMBeanServerConnector("/jndi/"+RuntimeServiceMBean.MBEANSERVER_JNDI_NAME);
MBeanServerConnection mbeanServerConnection =
connector.getMBeanServerConnection();
ObjectName service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
ObjectName serverRuntime = (ObjectName) mbeanServerConnection.getAttribute(service, "ServerRuntime");
ObjectName jmsRuntime = (ObjectName) mbeanServerConnection.getAttribute(serverRuntime, "JMSRuntime");
ObjectName[] jmsServers = (ObjectName[]) mbeanServerConnection.getAttribute(jmsRuntime, "JMSServers");
for (ObjectName jmsServer: jmsServers) {
if (JMS_SERVER.equals(jmsServer.getKeyProperty("Name"))) {
ObjectName[] destinations = (ObjectName[]) mbeanServerConnection.getAttribute(jmsServer, "Destinations");
for (ObjectName destination: destinations) {
if (destination.getKeyProperty("Name").endsWith("!"+JMS_DESTINATION)) {
Object o = mbeanServerConnection.invoke(
destination,
"deleteMessages",
new Object[] {""}, // selector expression
new String[] {"java.lang.String"});
System.out.println("Result: "+o);
break;
}
}
break;
}
}
connector.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
funciona muy bien en un entorno de un solo nodo, pero lo que sucede si se encuentra en un entorno agrupado con UN migratable JMSServer (actualmente en el nodo n. ° 1) y este código se está ejecutando en el nodo n. ° 2. Entonces no habrá JMSServer disponible y no se eliminará ningún mensaje.
Este es el problema que estoy enfrentando en este momento ...
¿Hay una manera de conectar a la JMSQueue sin tener la JMSServer disponibles?
[editar]
encontrado una solución: Utilizar el servicio de tiempo de ejecución de dominio en lugar:
ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
y asegúrese de tener acceso al puerto de administración en el WLS-cluster.
Aquí se muestra un ejemplo en WLST para un servidor administrado que se ejecuta en el puerto 7005:
connect('weblogic', 'weblogic', 't3://localhost:7005')
serverRuntime()
cd('/JMSRuntime/ManagedSrv1.jms/JMSServers/MyAppJMSServer/Destinations/MyAppJMSModule!QueueNameToClear')
cmo.deleteMessages('')
El último comando debe devolver el número de mensajes que se borre.
si se trata de una sola vez, lo más fácil sería hacerlo a través de la consola ...
el programa en el enlace a continuación le ayuda a borrar sólo los mensajes de cola pendiente basado en parámetro del mensaje entregado de nuevo
http://techytalks.blogspot.in/2016/02/deletepurge-pending-messages-from-jms.html
Dado que esta es su primera respuesta. por lo tanto, no estoy diciendo nada, pero trate de evitar enlaces externos y muestre algunos esfuerzos de su parte. – surajsn
- 1. Cómo dibujar la cola JMS?
- 2. La cola JMS está llena
- 3. ¿Herramienta para publicar mensajes de prueba en una cola JMS?
- 4. mensajes JMS por Node.js
- 5. ¿Puedo enviar mensajes a una cola JMS desde fuera del servidor de la aplicación?
- 6. JMS: ¿Cómo funcionan los selectores de mensajes con múltiples consumidores de cola y tema?
- 7. Evitar mensajes duplicados en JMS/ActiveMQ
- 8. Cómo eliminar un mensaje de la cola JMS
- 9. Reemplazar un mensaje en una cola jms
- 10. log4j y weblogic: mensajes de registro duplicados
- 11. Posibles trampas al usar una cola JMS?
- 12. Agregar una cola JMS a Jboss 7
- 13. ¿Uso en el mundo real de JMS/colas de mensajes?
- 14. Sistema de cola de mensajes
- 15. pensamiento de cola de mensajes
- 16. cómo configurar la plantilla de jms en la primavera para weblogic?
- 17. NServiceBus: Cómo mover mensajes de la cola de errores
- 18. ¿Cómo se maneja el orden de los mensajes en JMS?
- 19. ¿Cómo inicializar ConnectionFactory para la cola JMS remota cuando la máquina remota no se está ejecutando?
- 20. Cómo limitar el número de instancias de los BMD escuchando a una cola JMS Jboss
- 21. Editar mensajes de MSMQ en una cola
- 22. ¿Cómo puedo manejar múltiples mensajes al mismo tiempo desde un tema JMS (no en cola) con Java y Spring 3.0?
- 23. Recuperar mensajes de la (s) cola (s) de RabbitMQ
- 24. JBoss JMS Remote Queue?
- 25. ¿Cómo conectar Jms desde PHP?
- 26. ¿Cola de mensajes basada en Memcache?
- 27. ActiveMQ: la cola de mensajes no entregados guarda la orden de mis mensajes
- 28. Procesamiento JMS efectivo
- 29. Implementación de mensajería JMS
- 30. ¿Cómo simular la entrega de mensajes en AUTO_ACKNOWLEDGE JMS Session Scenario?
he intentado esto, pero tiene esta excepción: 'java.lang.UnsupportedOperationException: DeleteMessages (String) no es válido para la clase weblogic.jms.backend.BEDestinationRuntimeMBeanImpl' a pesar de que' ls() '' incluye -rx DeleteMessages entero: Cuerda (selector) 'en la información que devuelve. – pharsicle
¡Solucionado por mí mismo! Mi situación tiene un tema con suscriptores duraderos. Necesitaba cd al MBean para el suscriptor y llamar a 'deleteMessages ('')' en él. – pharsicle