2009-05-20 11 views
0

Existe-t-il un moyen de renvoyer des messages expirés dans une file d'attente de messages JBoss 4.2.2? Le problème est qu'ils ont dépassé leur nombre de tentatives, mais maintenant le problème est résolu, il y a donc un moyen de les renvoyer?Comment renvoyer un message de la file d'attente de messages JBoss 4.2.2 après l'expiration d'une nouvelle tentative

Dans JBoss 3, il s'agissait simplement de fichiers texte que vous pouviez déplacer. Maintenant qu'il est stocké dans une base de données, comment pouvez-vous le faire?

Répondre

0

C'est ce que je fini par faire:

Hashtable t = new Hashtable(); 
    t.put(Context.PROVIDER_URL, "localhost:1099"); 
    t.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
    Context ctx = new InitialContext(t); 
    Queue q = (Queue) ctx.lookup("/queue/DLQ"); 
    //---------------------------- 
    ConnectionFactory cf = (ConnectionFactory) ctx.lookup("/ConnectionFactory"); 
    Connection connection = cf.createConnection(); 
    Session session = connection.createSession(true, 0); 
    //--------------------------------- 
    MessageConsumer consumer = session.createConsumer(q); 
    connection.start(); 
    SpyObjectMessage m; 

    Queue originialDestination = null; 
//There can only be one in my case, but really you have to look it up every time. 
    MessageProducer producer = null; 
    while ((m = (SpyObjectMessage) consumer.receive(5000)) != null) { 
     Object o = m.getObject(); 
     Date messageDate = new Date(m.getJMSTimestamp()); 
     String originalQueue = m.getStringProperty("JBOSS_ORIG_DESTINATION"); 
      if (originialDestination == null) { 
       originialDestination = (Queue) ctx.lookup("/queue/" + 
originalQueue.substring(originalQueue.indexOf('.') + 1)); 
       producer = session.createProducer(originialDestination); 
      } 
      producer.send(session.createObjectMessage((Serializable) o)); 
     m.acknowledge(); 
    } 
    //session.commit(); //Uncomment to make this real. 
    connection.close(); 
    ctx.close(); 
1

Jetez un oeil à Hermes JMS. C'est un outil open source pour parcourir les files d'attente et les sujets JMS. Il peut rejouer les messages qui se retrouvent dans la file d'attente non distribuable du courtier.

+0

Hermes JMS est superbe, merci! – Yishai

0

Note: Je travaille pour CodeStreet

Notre « ReplayService pour JMS » produit est construit exactement pour ce cas d'utilisation: rechercher et de récupérer des messages déjà publiés (livraison n fois) - JMS est vraiment conçu pour une livraison unique. Avec ReplayService for JMS, vous pouvez configurer un enregistrement WebLogic pour enregistrer tous les messages publiés sur votre sujet ou votre file d'attente. Grâce à une interface graphique Web, vous pouvez ensuite rechercher des messages individuels (par sous-chaîne, XPath ou JMS Selector), puis les rejouer à nouveau dans la destination JMS d'origine. Pour plus de détails, voir http://www.codestreet.com/marketdata/jms/jms_details.php pour plus de détails.