We're trying to set a delay on some JMS messages, so that a message will only be added to the queue/ received by the listener after x time. So far we've tried 2 approaches that didn't work.
1) According to the spring documentation, we can set the delivery delay on the JMSTemplate. This is the sample code we tried:
@Autowired private JmsTemplate jmsTemplate; ... long deliveryDelay = ...; this.jmsTemplate.setDeliveryDelay(deliveryDelay); this.jmsTemplate.convertAndSend( queue.getName(), event); ... However, we get the following exception, even though our spring jms version is 4.0.5:
java.lang.IllegalStateException: setDeliveryDelay requires JMS 2.0 2) We also tried setting the delay on the message itself, but it looks like the delay was ignored, and the message was delivered immediately anyway.
@Component public class MyMessageConverter implements MessageConverter { ... @Override public Message toMessage(Object eventObject, Session session) throws JMSException, MessageConversionException { ... long deliveryDelay = ...; objectMessage.setLongProperty( ScheduledMessage.AMQ_SCHEDULED_DELAY, deliveryDelay); return objectMessage; } } The jmsTemplate definition in the spring xml:
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="cachingConnectionFactory" /> <property name="messageConverter" ref="myMessageConverter" /> <property name="sessionTransacted" value="true" /> </bean> Does anyone has any suggestions on what the problems are / other ideas on how to achieve delayed messaging? Thanks!