2016-05-13 13 views
0

のメッセージredlivery:JMS - 私はこのシナリオを持って失敗

  • MDBを介したJMSメッセージの精緻化が失敗する可能性がありますが、(この場合はRuntimeExceptionをスロー)
  • メッセージは後にかかわらず、再配信する必要があります(厳密に必要な理想的ではなく、:失敗の数に応じて増加遅延の後に)遅延Xの失敗の後、メッセージが
  • を無視し、決して

右のn再送信する必要があります私が持っている行動は、失敗したメッセージが即座に10回再配信され、これをカスタマイズすることができなかったということです。

@JMSdefinition(またはその他の注釈)でこれを達成する方法や、メッセージの正しいプロパティを設定する方法はありますか?もしそうなら、どうやって?

あなたが _AMQ_SCHED_DELIVERYプロパティを持つメッセージスケジュールすることができます

答えて

1

Queue q = (Queue) ServiceLocator.getInstance().getDestination("QUEUE"); 
    QueueConnectionFactory factory = (QueueConnectionFactory) ServiceLocator.getInstance().getConnectionFactory(
      "java:/ConnectionFactory"); 
    QueueConnection connection = factory.createQueueConnection(); 
    QueueSession session = null; 
    QueueSender sender = null; 
    session = connection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE); 
    sender = session.createSender(q); 
    ObjectMessage msg = session.createObjectMessage(); 
    if (redelivedCount > 0) { 
     msg.setIntProperty("redelivedCount", redelivedCount); 
     // schedule to run in 10 secs 
     msg.setLongProperty("_AMQ_SCHED_DELIVERY", System.currentTimeMillis() + 10000); 
    } 
    msg.setStringProperty("action", action); 
    msg.setObject(params); 
    sender.send(msg); 
+0

[この](http://activemq.apache.org/delay-and-schedule-message-delivery.html)も役立つこと。 – fhofmann

+0

ありがとうございます、魅力のように動作します! –

関連する問題