在这段代码中,我使用setJMSExpiration(1000)来发布者端队列中的一秒过期消息。但是从消费者方面来说,它在1秒后正确返回消息而不是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();
}
}
答案 0 :(得分:0)
您可以通过配置JMS MessageProducer来为您执行此操作,方法是通过接受TTL的send方法或通过在生产者上调用setTimeToLive来为所有已发送的消息添加相同的TTL。消息版本的JMS API很清楚,调用消息上的setter无效。
void setJMSExpiration(long expiration)抛出JMSException
设置邮件的到期值。
此方法仅供JMS提供程序在发送消息时设置此字段。客户端无法使用此消息来配置消息的到期时间。此方法是公共的,允许JMS提供程序在发送其实现不是自己的消息时设置此字段。
答案 1 :(得分:0)
我首先还认为可以在后处理器中直接在消息上设置到期时间,但是正如Tim Bish所说,这不是预期的处理方式,此后该值将重置为0 。我无法直接访问生产者,也没有设置生存时间,因为该对象位于库org.springframework.jms中(我正在关注this documentation)。
我可以做的一件事是设置时间以使用jmsTemplate:
import org.springframework.jms.core.JmsTemplate;
@Service
public class MyJmsServiceImpl implements MyJmsService {
@Inject
private JmsTemplate jmsTemplate;
private void convertAndSendToResponseQueue(String targetQueueName, String correlationid, Object message) {
// Set time to live
jmsTemplate.setExplicitQosEnabled(true);
jmsTemplate.setTimeToLive(5000);
jmsTemplate.convertAndSend(targetQueueName, message, new JmsResponsePostProcessor(correlationid));
}
}