2014-02-07 44 views
1

我一直无法从Google单独找出这一个。我正在连接到一个非持续性的EMS主题,该主题发布了一组数据的更新。如果我跳过几次更新,则无关紧要,因为以下更新无论如何都会覆盖它。Tibco JMS(EMS)TimeToLive每个客户?

在EMS主题上发布的消息数量非常高,偶尔出于消费者落后的原因。在客户端连接方面,有没有办法确定消息的'生存时间'?我知道有其他经纪人,但特别是在Tibco上,我一直无法弄清楚是否可能,只能确定在服务器端为所有客户端设置此参数(这不适用于我)。

我创造我的连接工厂,然后创建一个Apache骆驼的JMS用下面的代码端点:

TibjmsConnectionFactory connectionFactory = new TibjmsConnectionFactory(); 
    connectionFactory.setServerUrl(properties.getProperty(endpoints.getServerUrl())); 
    connectionFactory.setUserName(properties.getProperty(endpoints.getUsername())); 
    connectionFactory.setUserPassword(properties.getProperty(endpoints.getPassword())); 

    JmsComponent emsComponent = JmsComponent.jmsComponent(connectionFactory); 
    emsComponent.setAsyncConsumer(true); 
    emsComponent.setConcurrentConsumers(Integer.parseInt(properties.getProperty("jms.concurrent.consumers"))); 
    emsComponent.setDeliveryPersistent(false); 
    emsComponent.setClientId("MyClient." + ManagementFactory.getRuntimeMXBean().getName() + "." + emsConnectionNumber.getAndIncrement()); 
    return emsComponent; 

我使用tibjms-6.0.1,tibjmsufo-6.0.1,以及其他各种TIB * ** - 6.0.1。

回答

2

的JMSExpiration属性可以设置每个消息或更全局,在目的地级(在这种情况下在此目的地接收到的所有消息的JMSExpiration被覆盖)。它不能为每个消费者设置。

一个选项是创建一个从主题到只有您的客户应用程序将侦听的自定义队列,并将此队列的“过期”属性设置为0(无限制)。然后,发布在主题上的所有消息都将被复制到此队列中,并且不会过期,无论其JMSExpiration值如何。

+0

不是我希望大声笑的答案 - 我喜欢你自己的TTL自定义队列,不过谢谢! – Matt