如下,我們先寫一個能延時發送消息的MessageConverter
DelayMessageConverter.java
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.support.converter.MessageConversionException;
import org.springframework.jms.support.converter.SimpleMessageConverter;
public class DelayMessageConverter extends SimpleMessageConverter {
/** deliveryType */
private String deliveryType = "JMS_JBOSS_SCHEDULED_DELIVERY";
/** schedDeliveryTime */
private long schedDeliveryTime = 30000;
public void setDeliveryType(String deliveryType) {
this.deliveryType = deliveryType;
}
public void setSchedDeliveryTime(long schedDeliveryTime) {
this.schedDeliveryTime = schedDeliveryTime;
}
@Override
public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
Message message = super.toMessage(object, session);
message.setLongProperty(this.deliveryType, System.currentTimeMillis() + this.schedDeliveryTime);
return message;
}
}
然後再配置配置JmsTemplate的時候把這個對象配進去就可以了
<bean id="queueMessageConverter" class="jms.server.DelayMessageConverter">
<property name="schedDeliveryTime" value="30000" />
</bean>
<bean id="jmsTemplate" lazy-init="true"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="myConnectionFactory" />
<property name="defaultDestinationName" value="A" />
<property name="sessionTransacted" value="true" />
<property name="messageConverter" ref="queueMessageConverter" />
</bean>
這樣就可以實現Jms消息的延遲發送了!