Come inviare nuovamente il messaggio dalla coda dei messaggi JBoss 4.2.2 dopo tentativi scaduto

StackOverflow https://stackoverflow.com/questions/890384

  •  23-08-2019
  •  | 
  •  

Domanda

C'è un modo per inviare nuovamente messaggi scaduti in una coda di messaggi JBoss 4.2.2? Il problema è che hanno superato la loro quantità di tentativi, ma ora il problema è stato risolto, quindi c'è un modo per rinviare loro?

In JBoss 3 erano solo file di testo che si poteva muoversi. Ora che è memorizzato in un database, come si può fare?

È stato utile?

Soluzione 2

Questo è quello che ho finito per fare:

    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();

Altri suggerimenti

Dai un'occhiata alla Hermes JMS . Si tratta di uno strumento open source per la navigazione code JMS e argomenti. E 'possibile riprodurre i messaggi che finiscono in coda recapitabili del broker.

Nota: io lavoro per CodeStreet

Il nostro 'ReplayService per JMS' prodotto è costruito proprio per questo caso d'uso:. Ricerca e ricevere messaggi precedentemente pubblicati (N-tempi di consegna) - JMS è davvero progettato per una consegna 1-tempo

Con ReplayService per JMS, si dovrebbe configurare una registrazione WebLogic per registrare tutti i messaggi pubblicati al tuo argomento o la coda. Attraverso un'interfaccia grafica basata sul Web, è possibile cercare per i singoli messaggi (da sottostringa, XPath o JMS Selector) e poi ripetere di nuovo alla destinazione originaria JMS.

http://www.codestreet.com/marketdata/jms/jms_details.php per ulteriori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top