Как повторно отправить сообщение из очереди сообщений JBoss 4.2.2 после истечения времени повторной попытки
Есть ли способ повторно отправить просроченные сообщения в очередь сообщений JBoss 4.2.2? Проблема в том, что они превысили количество повторных попыток, но теперь проблема устранена, есть ли способ отправить их повторно?
В JBoss 3 это были просто текстовые файлы, которые вы могли перемещать. Теперь, когда он хранится в базе данных, как вы можете это сделать?
3 ответа
Это то, что я в итоге сделал:
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();
Посмотрите на Гермеса JMS. Это инструмент с открытым исходным кодом для просмотра очередей и тем JMS. Он может воспроизводить сообщения, которые попадают в очередь недоставленных сообщений брокера.
Примечание: я работаю на CodeStreet
Наш продукт "ReplayService for JMS" создан именно для этого случая использования: поиск и извлечение ранее опубликованных сообщений (n-кратная доставка) - JMS действительно предназначена для однократной доставки.
В ReplayService для JMS вы настраиваете запись WebLogic для записи всех сообщений, опубликованных в вашей теме или очереди. С помощью графического веб-интерфейса вы можете искать отдельные сообщения (по подстроке, XPath или JMS Selector) и затем воспроизводить их снова в исходное место назначения JMS.
См. http://www.codestreet.com/marketdata/jms/jms_details.php для получения дополнительной информации.