Come inviare nuovamente il messaggio dalla coda dei messaggi JBoss 4.2.2 dopo tentativi scaduto
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?
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.