Как повторно отправить сообщение из очереди сообщений JBoss 4.2.2 после истечения времени повторной попытки - PullRequest
0 голосов
/ 21 мая 2009

Есть ли способ повторно отправить просроченные сообщения в очередь сообщений JBoss 4.2.2? Проблема в том, что они превысили количество повторных попыток, но теперь проблема устранена, есть ли способ отправить их повторно?

В JBoss 3 это были просто текстовые файлы, которые вы могли перемещать. Теперь, когда он хранится в базе данных, как вы можете это сделать?

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Посмотрите на Hermes JMS . Это инструмент с открытым исходным кодом для просмотра очередей и тем JMS. Он может воспроизводить сообщения, которые попадают в очередь недоставленных сообщений брокера.

0 голосов
/ 05 сентября 2014

Примечание: я работаю на CodeStreet

Наш продукт 'ReplayService for JMS' создан именно для этого случая использования: поиск и извлечение ранее опубликованных сообщений (n-кратная доставка) - JMS действительно предназначен для однократной доставки.

В ReplayService для JMS вы настраиваете запись WebLogic для записи всех сообщений, опубликованных в вашей теме или очереди. С помощью графического веб-интерфейса вы можете искать отдельные сообщения (по подстроке, XPath или JMS Selector) и затем воспроизводить их снова в исходное место назначения JMS.

Подробнее см. http://www.codestreet.com/marketdata/jms/jms_details.php.

0 голосов
/ 21 мая 2009

Вот что я закончил:

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