2013-02-12 20 views

回答

1

规格如下说,

当达到一个消息的到期时间,供应商应该抛弃 它。 JMS API没有定义任何形式的消息通知到期。客户不应收到已过期的消息;但是,JMS API并不能保证不会发生这种情况。

所以它的完全实现具体。您的发布者/订阅者应按照JMS规范放弃过期邮件的方式来实现,如果不是,即使您没有在到期时间之后仍然收到这些邮件。

1

也许你做错了什么。试试我的测试

String url = "tcp://localhost:61616"; 
    BrokerService broker = new BrokerService(); 
    broker.addConnector(url); 
    broker.start(); 

    ConnectionFactory cf = new ActiveMQConnectionFactory(url); 
    Connection conn = cf.createConnection(); 
    Session s = conn.createSession(true, Session.AUTO_ACKNOWLEDGE); 
    ActiveMQQueue q = new ActiveMQQueue("test"); 

    MessageProducer p = s.createProducer(q); 
    p.send(s.createTextMessage("!!!!"), DeliveryMode.NON_PERSISTENT, 0, 1000); // ttl = 1s 

    Thread.sleep(2000); 

    MessageConsumer c = s.createConsumer(q); 
    System.out.println("Received: " + c.receiveNoWait()); 

    System.exit(1); 

它使用ActiveMQ的,全5.6.0.jar,TTL = 1秒,你会看到,如果你的睡眠时间大于1s,你送了它从队列中消失的消息后。

相关问题