如何通过Java编程使用ActiveMQ设置队列消息的过期时间?
In this code, I am using setJMSExpiration(1000) for expire message of one second in queue from publisher side. But From Consumer Side, It is returning properly message after 1 second instead of null.
public class RegistrationPublisher extends Thread{
public void run() {
publisherQueue("Registration.Main.*");
}
public void publisherQueue(String server){
try {
String url="tcp://192.168.20.49:61616";
// Create a ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(server);
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
String text = "Test";
TextMessage message = session.createTextMessage(text);
message.setJMSExpiration(1000);// For Expire message in one second
producer.send(message);
producer.close();
session.close();
connection.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) throws IOException{
RegistrationPublisher registrationPublisher=new RegistrationPublisher();
registrationPublisher.start();
}
}
# 1 楼答案
我最初还认为可以在后处理器中直接在消息上设置过期时间,但正如Tim Bish在上面所说的,这不是预期的方式,之后该值将重置为0。我无法直接访问制作人,也无法设置生存时间,因为该对象位于图书馆组织中。springframework。jms(我在跟踪this documentation)
我能做的一件事是设定时间在jmsTemplate上生活:
# 2 楼答案
通过配置JMS MessageProducer,使其通过接受TTL的send方法为您执行此操作,或者在producer上调用setTimeToLive,将相同的TTL添加到所有发送的消息中。消息版本的JMS API清楚地表明,在消息上调用setter没有任何效果