Tuesday, July 5, 2011

WebLogic JMS, scheduling a JMS message for delivery in the future

http://java.dzone.com/articles/sending-delayed-jms-messages

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/javadocs/weblogic/jms/extensions/WLMessageProducer.html#setRedeliveryLimit%28int%29


NOTE: this setting can take place either on the Queue or on the Connection factory!




See also basic JMS Send Message code here
If we enrich that code with:

long timeToDeliver = 60000; // a minute from now
//Casts queueSender to weblogic.jms.extensions.WLMessageProducer interface and set delivery time
((WLMessageProducer) queueSender).setTimeToDeliver(timeToDeliver );
queueSender.send(message);


see here for javadoc


The message WILL appear in the queue, but with a state "delayed", a "Delivery Time" in the future and a property JMS_BEA_DeliveryTime with the future time.


- Man of the future - age: 500 years from now
- I tell you that I have seen in the street a man like this, alive!
- Absurd!


In OSB, the best thing is to have 2 Connection factories, each with a different Default Time To Deliver, and a different Business Service for immediate messages and delayed messages.

No comments: