Existe-t-il et de manière (en dehors de la consommation du message) je peux purger/supprimer le message par programme à partir de la file d'attente JMS. Même si c'est possible avec l'outil de ligne de commande wlst, il sera d'une grande aide.Comment purger/supprimer un message de la file d'attente JMS weblogic
Répondre
Vous pouvez utiliser JMX pour purger la file d'attente, à partir de Java ou de WLST (Python). Vous pouvez trouver les définitions MBean pour WLS 10.0 sur http://download.oracle.com/docs/cd/E11035_01/wls100/wlsmbeanref/core/index.html. Voici un exemple Java de base (ne pas oublier de mettre weblogic.jar dans le 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();
}
}
}
fonctionne très bien sur un seul environnement de nœud, mais ce qui se passe si vous êtes sur un environnement en cluster avec ONE lixiviable JMSServer (actuellement sur le noeud n ° 1) et ce code s'exécute sur le noeud n ° 2. Ensuite, il n'y aura pas de JMSServer disponible et aucun message ne sera supprimé.
C'est le problème que je suis face à ce moment ...
Est-il possible de se connecter au JMSQueue sans avoir le JmsServer disponible?
[modifier]
trouvé une solution: Utiliser le service d'exécution de domaine à la place:
ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
et assurez-vous d'accéder au port d'administration sur le WLS-cluster.
Voici un exemple dans WLST pour un serveur géré en cours d'exécution sur le port 7005:
connect('weblogic', 'weblogic', 't3://localhost:7005')
serverRuntime()
cd('/JMSRuntime/ManagedSrv1.jms/JMSServers/MyAppJMSServer/Destinations/MyAppJMSModule!QueueNameToClear')
cmo.deleteMessages('')
La dernière commande doit renvoyer le nombre de messages qu'il supprimé.
si cela est une fois, il serait plus facile de faire la via la console ...
le programme en lien ci-dessous vous aide à des messages clairs en attente seulement de file d'attente en fonction des paramètres de message relivré
http://techytalks.blogspot.in/2016/02/deletepurge-pending-messages-from-jms.html
Puisqu'il s'agit de votre première réponse. Donc, je ne dis rien, mais essayez d'éviter les liens externes et montrez des efforts de votre part. – surajsn
- 1. Tuning JMS File Store
- 2. Configuration de JMS sur un cluster Weblogic
- 3. Remplacement d'un message dans une file d'attente jms
- 4. Comment se connecter à une file d'attente JMS Weblogic à l'aide de t3s?
- 5. Comment savoir quel consommateur reçoit le message de la file d'attente sur JMS?
- 6. Les threads gourmands saisissent trop de messages JMS sous WebLogic
- 7. Recommandation sur la configuration de la file d'attente Mule JMS
- 8. JMS Reconnaissez Asynchronous message
- 9. Message JMS au serveur distant
- 10. Weblogic 10 - JMS - Ce RJVM a déjà été arrêté
- 11. Délai d'acquittement de message JMS?
- 12. jms message ne bouge pas de la file d'attente dans websphere
- 13. Contrôle du serveur JMS: trop de MDBeans créés (weblogic)
- 14. Comment injecter un message dans la file d'attente de Postfix?
- 15. Comment connaître la capacité maximale d'une file d'attente JMS?
- 16. comment configurer jms template au printemps pour weblogic?
- 17. Message Driven Bean Selectors (JMS)
- 18. Comment publier un sujet JMS avec Spring JMS?
- 19. Spring JMS Message Listener Container
- 20. Reconnaître un message d'un autre canal/session dans JMS
- 21. Types de message disponibles dans JMS?
- 22. Problème de création JMS File d'attente sur Glassfish
- 23. Sécurisation de l'adaptateur de canal piloté par message JMS
- 24. Comment connecter Jms depuis PHP?
- 25. Comment puis-je obtenir une file d'attente JMS existante?
- 26. Comment déployer le module JMS de WebLogic sur un autre serveur
- 27. Spring Integration: réponse à l'envoi temporaire file d'attente JMS
- 28. Comment un pont de messages se rapporte-t-il à une file d'attente dans Weblogic?
- 29. Sinatra message File d'attente
- 30. Filtrage du récepteur de message JMS par JMSCorrelationID
J'ai essayé ceci mais j'ai obtenu cette exception: 'java.lang.UnsupportedOperationException: deleteMessages (String) non valide pour la classe weblogic.jms.backend.BEDestinationRuntimeMBeanImpl' même si' 'ls()' inclut '-rx deleteMessages Integer: String (sélecteur) 'dans les informations qu'il retourne. – pharsicle
Correction pour moi-même! Ma situation a un sujet avec des abonnés durables. J'avais besoin de cd au MBean pour l'abonné et appelez 'deleteMessages ('')' dessus. – pharsicle